【问题标题】:Reading the same file twice in the code in C在 C 中的代码中两次读取同一个文件
【发布时间】:2014-10-16 06:28:24
【问题描述】:

如果我正在读取文件的第一行并存储在某个变量中,如果我再次读取同一个文件并存储在不同的数组中,我的数组会跳过第一行吗?

a1,a2,a3,a4,a5
b1,b2,b3,b4,b5
c1,c2,c3,c4,c5
d1,d2,d3,d4,d5
e1,e2,e3,e4,e5

我的代码看起来像这样

    FILE* fp1 = fopen("test.csv","r");
    if(fp1 == NULL)
    {
      printf("Failed to open file\n");
      return 1;
    }

    fscanf(fp1,"%[^\n]",variable); 
    while((fscanf(fp1,"%[^,],%[^,],%[^,],%[^,],%[^\n]\n",C1,C2,C3,C4,C5)>0))
    {

        some function()     

    }
    for(i=1;i<=5;i++)
    {
       printf("%s\t", C1[i]);
       printf("%s\n", C2[i]);
    }

我的输出从文件的第二行开始,即

C1[i] = {b1,c1,d1,e1}  but not a1
C2[i] = {b2,c2,d2,e2}  but not a2

有人可以简要说明为什么第一行被跳过了吗?

谢谢,

【问题讨论】:

  • 尝试倒带文件,即 fp1.rewind()。然后它将指向文件的开头
  • 没有被跳过。您不是“再次读取文件”。你读了第一行并用它做了一件事,然后你读了第二行到最后几行,用它们做了不同的事情。
  • @chris : OP 正在使用 C。所以我认为调用会像 rewind(fp1);
  • 谢谢大家的建议,@hobbs:我的问题是如果我第二次使用 fscanf(fp1),它会从第二行读取还是从第一行读取?谢谢
  • fscanf(fp1,"%*[^\n]%*c"); : 跳过第一行。

标签: c file csv readfile c-strings


【解决方案1】:

从文件中对 fscanf 的后续调用将进一步读入文件,除非 rewinded,除非流不可回绕,例如 stdin。

【讨论】:

    猜你喜欢
    • 2016-03-09
    • 2012-12-31
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    相关资源
    最近更新 更多