我有另一个问题,fscanf()
只能读取一个字符串,文件中有2个,所以只重复它。
防爆。在档案
Name
ID
当我读到它时。
struct customer {
int id;
char name[100];
};
struct customer custid[100];
int num_cust = 1;
strcpy(custid[num_cust].name, "Name");
num_cust++;
strcpy(custid[num_cust].name, "ID");
写作时:
int i;
for (i = 1; i < 3; i++) {
fprintf(test, "%s\n", custid[i].name);
}
阅读:
for (i = 1; i < 3; i++) {
rewind(test);
fscanf(test, "%s\n", custid[i].name);
printf("%s\n", custid[i].name);
}
结果:
Name
Name
Process returned 0 (0x0) execution time : 0.007 s
Press any key to continue.
但是当我用int做它时,你可以得到2个不同的结果,这就是我想要的。
是否有fscanf()
的修复或替代,因为它无法读取2个字符串?
答案 0 :(得分:1)
发生此问题是因为您将rewind()
放在for循环中。将它放在for循环之前。然后它会正常工作。
int i;
for (i = 0; i < 2; i++) {
fprintf(test, "%s\n", custid[i].name);
}
rewind(test);
for (i = 0; i < 2; i++) {
// rewind(test);
fscanf(test, "%s\n", custid[i].name);
printf("%s\n", custid[i].name);
}
答案 1 :(得分:0)
这可能是您的扫描失败。
故事的道德:在尝试使用扫描值之前,请务必检查scanf()
系列的返回值是否成功。
在你的情况下,
fscanf(test, "%s\n", custid[i].name);
需要显式'\n'
出现在要匹配的输入中,否则匹配将失败。
您可能希望从扫描部分的格式字符串中删除'\n'
。
之后,正如other answer by W.Jack中所述,rewind()
的定位也显得有误。在阅读开始之前,您需要回放一次。在阅读循环之外拨打电话。