在C中逐行读取和处理文本文件

时间:2014-01-15 04:50:05

标签: c arrays struct

我有一个看起来像这样的文本文件:

1;Einstein;Albert;3914-1948-4
2;Newton;Isaac;1941-5525-2
...

和像这样的结构

typedef struct {
int Nr;
char FName[30];
char LName[30];
char ID[12];
} student;

我有一个函数,它从上面的文件和结构中获取一行构造成一行,并从结构中的行中保存数据。

现在我必须从文件中读取一行,用我的函数处理它并转到下一行。

我会在循环中执行此操作,该循环将逐行跳转并为每一行创建一个新的变量类型学生。

但我不知道该怎么做。 fgets只允许你在一行中阅读而且我没有看到跳到下一行的方法。

有没有办法做到这一点并不太复杂?

2 个答案:

答案 0 :(得分:1)

fgets的每次调用都会返回一个新行,直到EOF(即“文件结束”)。

请参阅:fgets

有关使用fgets的读取循环的简要示例,请参阅:

fgets - get a string from a stream

但是,如果你不能确定分配足够长的缓冲区以容纳一行,通常最好使用fgetc一次读取一个字符 - 不用担心,文件I / O仍然是缓冲的,不是一次读取一个字符 - 并且随着时间的推移将文本组装成标记而不是处理比你提供的任何缓冲区更长的行,这可能需要你处理在一个填充缓冲区之间拆分的标记而下一个。

答案 1 :(得分:1)

你可以这样做:

    str char *str;
    str = fgets(fptr);
    while (str != EOF)
    {
        printf ("%s", str);
        str  = fgets(fptr);
    }