使用fscanf多值在C中读取
从以下格式的文本文件:使用fscanf多值在C中读取,c,scanf,C,Scanf,从以下格式的文本文件: 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",
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: ?"
它什么也没读,什么也没发生
我从中读取的文件是.dat,用于分配任务,因此只能使用.dat。- 除非数据中有逗号,否则格式字符串中不应该有逗号,而数据中没有逗号
- 如果任何字段包含空格,这将不起作用,因为
将停止%s
- 您需要显示更多的input.dat文件
- 通常最好使用
阅读整行内容,然后再考虑对其进行解析fgets()
- 除非数据中有逗号,否则格式字符串中不应该有逗号,而数据中没有逗号
- 如果任何字段包含空格,这将不起作用,因为
将停止%s
- 您需要显示更多的input.dat文件
- 通常最好使用
阅读整行内容,然后再考虑对其进行解析fgets()
printf
printf("Name: %s, Surname: %s, ID: %d, Address: %s\n",
name2, surname2, id2, address2);
如果输入txt文件中的separater-between字段是逗号,
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);
}
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);
}
如果输入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);
}
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);
}
首先,从
printf
printf("Name: %s, Surname: %s, ID: %d, Address: %s\n",
name2, surname2, id2, address2);
如果输入txt文件中的separater-between字段是逗号,
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);
}
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);
}
如果输入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);
}
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);
}
您声明文本文件的格式为:
string<space>string<space>numeric<space>string<newline>
这假设每个字符串
字段是一个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
哈哈,9999nice@lly.com 以及上述变量声明,代码如下:
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);
正确读取/显示值。您声明文本文件的格式为:
string<space>string<space>numeric<space>string<newline>
这假设每个字符串
字段是一个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
哈哈,9999nice@lly.com 以及上述变量声明,代码如下:
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);
正确读取/显示值。我们可以查看输入数据文件的内容吗?请注意,使用字符串说明符而不使用宽度说明符并不安全,这几乎就像
获取
。输入文件中的字段之间没有逗号?由于您使用逗号,
作为scanf
中字段之间的分隔符,我们可以查看输入数据文件的内容吗?请注意,使用字符串说明符而不使用宽度说明符并不安全,这几乎就像获取
。输入文件中的字段之间没有逗号?因为您使用逗号,
作为scanf