从C ++中的文件中读取第一行

时间:2014-03-15 23:46:36

标签: c++ fopen fgets

我想执行以下操作:

  1. 从文件中读取第一行并将其存储在变量N
  2. 读取0 <= i < N的文件行,并将它们存储在一个数组中以便稍后对其进行排序。
  3. 注意:如果N == 0则应退出。

    这是我的代码:

    FILE *f = fopen(argv[1], "r");
    
    while (true)
    {    
        fgets (mystring , 100 , f);
        cout << mystring;
        fseek(f, 1, SEEK_CUR);
        N = atoi(mystring);    
    
        if (N == 0)
        {
            cout << "\n Exit";
            exit(0);
        }
    
        for (i = 0; i < N; i++)
        {
            bzero(mystring, sizeof(mystring));
            fgets (mystring , 100 , f);
            fseek(f, 1, SEEK_CUR);
            a[i] = atoi(mystring);
            cout << a[i];
        }
    }
    

    它正确读取第一个文件(包含N),但随后它将文件读作00000000000,以便N的下一个值变为0并退出循环。

    这是我的输入文件:

    10
    1
    2
    3
    4
    5
    6
    7
    5
    3
    3
    5
    1
    2
    5
    5
    6
    0
    

    有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

知道了!

删除额外的fseek(f, 1, SEEK_CUR);

每个fgets()读取包含新行的行。 所以文件指针指向新行的开头。 您的fseek将指针移动到下一个字符,即新行字符\n)。 空字符串的atoi()返回0.

提供帮助。

现在,你做的一件小事是正确的。如果您的mystring被声明为char mystring[100],则在您致电fgets的每个地方,将100更改为sizeof(mystring)。这更正确。

我不明白为什么你会有这么多的负面因素。我正在提出你的问题。