[英]Reading in C using fscanf multiple values
来自以下格式的文本文件:
Name Surname ID Address
Name Surname ID Address
Name Surname ID Address
我需要提取每个变量并将其放入变量中。
我尝试了以下两种方法:
while(fscanf(fp, "%s,%s,%d,%s\n", name2,surname2,&id2,address2) != EOF){
printf("Name: %s, Surname: %s, ID: %d, Address: %s\n",
&name2, &surname2, &id2, &address2);
}
这给了我错误的结果,它每行只读取一个单词,所以结果是这样的:
Name: Name Surname:@,a ID:2272012 Address: ?" Name: Surname Surname:@,a ID:2272012 Address: ?" Name: ID Surname:@,a ID:2272012 Address: ?" Name: Address Surname:@,a ID:2272012 Address: ?"
我使用的另一种方法是:
while(fscanf(fp, "%s,%s,%d,%s\n", name2,surname2,&id2,address2) == 4){
printf("Name: %s, Surname: %s, ID: %d, Address: %s\n",
&name2, &surname2, &id2, &address2);
}
它什么也没读,什么也没发生。
我正在读取的文件是.dat,用于分配作业,因此只能使用.dat。
%s
将停止。 fgets()
阅读整行, 然后再担心解析它。 您声明文本文件的格式为:
string<space>string<space>numeric<space>string<newline>
如果正确,则格式字符串必须完全匹配:
strings
| | numeric
| | | +-----string
| | | | +---newline
V V V V V
"%s %s %d %s\n"
^ ^ ^
| | |
spaces
假设每个string
字段都是一个ASCII值块,没有空格/制表符等。您的代码缺少定义变量的方式,大概是这样的:
char name2[100] = {0};
char surname2[100] = {0};
int id2 = 0;
char address2[100] = {0};
在这种情况下,您不需要在fscanf
字符串中使用&
开头。 因此,给定一个输入文件:
首先发射1234 somebody@something.com
秒,但22352 goo@gle.com
他们哈哈9999 nice@lly.com
以及上面的变量declairactions,下面的代码:
FILE * fp;
fp = fopen("test.txt", "r");
while(fscanf(fp, "%s %s %d %s\n", name2, surname2, &id2, address2) == 4)
printf("name: %s %s, id: %d, address %s\n", name2, surname2, id2, address2);
fclose(fp);
正确读取/显示值。
首先,从printf
变量中删除&
printf("Name: %s, Surname: %s, ID: %d, Address: %s\n",
name2, surname2, id2, address2);
如果您输入的txt文件中的字段之间的分隔符是逗号,
Name,Surname , ID ,Address
Name ,Surname,ID,Address
Name,Surname,ID,Address
然后在fscanf
使用以下字符串格式
while(fscanf(fp, " %[^, ] , %[^, ] , %d , %[^\n]", name2,surname2,&id2,address2) != EOF){
printf("Name: %s, Surname: %s, ID: %d, Address: %s\n",
name2, surname2, id2, address2);
}
如果输入txt文件中字段之间的分隔符为空格
Name Surname ID Address
Name Surname ID Address
Name Surname ID Address
然后在fscanf
使用以下字符串格式
while(fscanf(fp, " %s %s %d %[^\n]", name2,surname2,&id2,address2) != EOF){
printf("Name: %s, Surname: %s, ID: %d, Address: %s\n",
name2, surname2, id2, address2);
}
while(fscanf(fp, "%s,%s,%d,%s\n", name2,surname2,&id2,address2) != EOF){
printf("Name: %s, Surname: %s, ID: %d, Address: %s\n",
&name2, &surname2, &id2, &address2);
}
我认为这是错误所在:
它应该是:
while(fscanf(fp, "%s,%s,%d,%s\n", name2,surname2,&id2,address2) != EOF){
printf("Name: %s, Surname: %s, ID: %d, Address: %s\n",
name2, surname2, id2, address2);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.