fscanf()只能在读取文件结构时接受一个字符串,而不能使用int C

时间:2017-05-16 06:43:47

标签: c file-io scanf

我有另一个问题,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个字符串?

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()的定位也显得有误。在阅读开始之前,您需要回放一次。在阅读循环之外拨打电话。