扫描数据从文件到结构

时间:2014-07-24 04:49:28

标签: c file structure

正在将文件中的信息扫描到结构中,然后显示以检查输入是否正确。

我正在使用Dev C ++来编写C语言。

由于某种原因,信息未被正确扫描且根本不显示。 任何帮助,将不胜感激。

#include <stdio.h>
#include <string.h>
typedef struct
{
    int client_id;
    char client_business_name [30];
    char client_first_name [20];
    char client_last_name [20];
    char client_address [40];
    float client_budget;
    char client_business_info [300];
}Client;
main()
{
    Client c[100];
    int x; 
    FILE*z=fopen("NOVA.txt","r");

    for (x=0;x<100;x++)
    {
        c[x].client_id=-1;
        strcpy(c[x].client_business_name,"NULL");
        strcpy(c[x].client_first_name,"NULL");
        strcpy(c[x].client_last_name,"NULL");
        strcpy(c[x].client_address,"NULL");
        c[x].client_budget=-1;
        strcpy(c[x].client_business_info,"NULL");
    }

    for (x=0;x<100;x++)
    {
        fscanf (z,"%d\n %[^\n]\n %[^\n]\n %[^\n]\n %[^\n]\n%f\n %[^\n]\n\n",
                &c[x].client_id, c[x].client_business_name, c[x].client_first_name,
                c[x].client_last_name, c[x].client_address, &c[x].client_budget,
                c[x].client_business_info);
    }

    for (x=0;x<100;x++)
    {
        printf("\n%d\n",c[x].client_id);
        printf("%s\n",c[x].client_business_name);   
        printf("%s\n",c[x].client_first_name);
        printf("%s\n",c[x].client_last_name);
        printf("%s\n",c[x].client_address);
        printf("%f\n",c[x].client_budget);
        printf("%s\n",c[x].client_business_info);
    }

    fclose (z);
    system ("PAUSE");
}

来自记事本的NOVA.txt样本

23
kk
f l
23 kk
50000
shfbskfjabdsbf

45
jj
b l
45 yy
80000
gdfygfyfhgu

另外,有人可以发布固定代码的样子吗?

1 个答案:

答案 0 :(得分:0)

OP的问题始于在同一行上使用名字和姓氏并使用" %[^\n]\n %[^\n]\n"解析。

scanf()系列的其他问题对任何格式字符串white-space指令都是一样的。格式字符串中的"\n "" "的{​​{1}}相同。所有意味着消耗任何空白区域。

正如@The Paramagnetic Croissant所说,使用"\n"处理意外输入时会遇到麻烦。以下是使用fscanf()然后解析读取字符串的解决方案。其他错误检查可能包括在fgets()和第一个/最后一个名称行的末尾查找额外数据。也可以使用floatstrtol(),它们可以使用更好的错误检查。请注意使用strtof()等宽度限制格式的stings来防止缓冲区溢出。始终检查"%299[^\n]"函数的返回值。

建议在单独的函数中解析复杂记录。

scanf()