从文本文件中读取会跳过第一行

时间:2015-03-07 04:40:26

标签: c file pointers text while-loop

我使用strtok从一个看起来像这样的文件中读取。感谢我上一个问题的答案,seg故障消失了。但是,我现在遇到了读取文件的问题,而不是在第一行读取

再一次:我有一个看起来像这样的文件(test.txt)

5f6
2f6

一个看起来像这样的c文件:

#include <ncurses.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

int main(int argc, char * argv[])
{
    char buf[100];
    char *ptr;
    char *ptr2;
    char *ptr3;
    char *ptr4;
    int a,b,c,d;
    FILE *file;

    initscr();
    cbreak();
    noecho();

    if (argc > 1)
     {
        file = fopen(argv[1], "r");
        if (file == NULL) //doesn't return null
            return -1;
        while (fgets(buf,100,file) != NULL)
         {
            ptr  = strtok(buf,"f");
            ptr2 = strtok(NULL," ");
            ptr3 = strtok(NULL,"f");
            ptr4 = strtok(NULL," ");
            if (ptr != NULL)
                a = atoi(ptr);
            if (ptr2 != NULL)
                b = atoi(ptr2);
            if (ptr3 != NULL)
                c = atoi(ptr3);
            if (ptr4 != NULL)
                d = atoi(ptr4);

            mvprintw(0,0,"Values are a %d b %d c %d d %d",a,b,c,d);
         }
     }
    refresh();
    getchar();
    endwin();

    return 0;
}

从文本文件中,值应为(预期输出):a = 5, b = 6, c = 2, d = 6;

但程序输出:a = 2, b = 6, c = 0, d = 0

我试图修改文本文件的条目(更改周围的值),但这似乎没有任何改进。我也试图改变目录,用另一个目录重写这个代码用新文件(如果它是某种内存问题,但都无济于事。)任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

两件事:fgets将读取行,即直到找到换行符或缓冲区已满。使用当前的文件布局,您无法使用一个fgets获取所有四个值。

你实际上是从文件中读取了两行,但是你覆盖了结果,因为你没有提前光标位置;你总是写(0,0)。所以你只能看到最后一行的值。