正在将文件中的信息扫描到结构中,然后显示以检查输入是否正确。
我正在使用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
另外,有人可以发布固定代码的样子吗?
答案 0 :(得分:0)
OP的问题始于在同一行上使用名字和姓氏并使用" %[^\n]\n %[^\n]\n"
解析。
scanf()
系列的其他问题对任何格式字符串white-space指令都是一样的。格式字符串中的"\n "
与" "
的{{1}}相同。所有意味着消耗任何空白区域。
正如@The Paramagnetic Croissant所说,使用"\n"
处理意外输入时会遇到麻烦。以下是使用fscanf()
然后解析读取字符串的解决方案。其他错误检查可能包括在fgets()
和第一个/最后一个名称行的末尾查找额外数据。也可以使用float
和strtol()
,它们可以使用更好的错误检查。请注意使用strtof()
等宽度限制格式的stings来防止缓冲区溢出。始终检查"%299[^\n]"
函数的返回值。
建议在单独的函数中解析复杂记录。
scanf()