如何使用<文本文件读取整行?

时间:2017-01-25 20:36:29

标签: c gcc file-io

我试图从一些文本文件中获取一行而不是一个单词,直到它遇到空格,这里是源代码:

#include <stdio.h>

void main() {
  int lineNum=0;
  char lineContent[100];

  scanf("%s", &lineContent);
  printf("%s\n", lineContent);
}

这是我的文本文件,名为test.txt,内容包含2行:

111 John Smith 100 98 1.2 2.5 3.6
222 Bob  Smith 90 91 3.2 6.5 9.6

我用以下命令运行它:

a.out < test.txt

我的输出只是:

111

我想要的是:

111 John Smith 100 98 1.2 2.5 3.6

当然,我可以简单地使用while语句并递归读取,直到它遇到EOF,但这不是我想要的。我只是想每次从文件中读取一行。

我该怎么做?

非常感谢。

2 个答案:

答案 0 :(得分:3)

fgets()是最方便的标准库函数,用于一次读取一行文件。 GNU getline()更方便,但它是非标准的。

但是,如果您想使用scanf(),则可以使用[字段描述符代替s来执行此操作:

char lineContent[100];

scanf("%99[^\n]", &lineContent);
getchar();

请注意,在遇到长行时,使用显式字段宽度来防止超出lineContent的范围。另请注意,[描述符与s的不同之处在于[不会跳过前导空格。如果保留前导空格对您来说很重要,那么scanf s字段是非首发。

getchar()读取终止换行符,假设有一个换行符,scanf()未读取99个字符而未到达行尾。

答案 1 :(得分:1)

如果您想逐行阅读,请使用fgets()getline()(在POSIX系统上提供)而不是scanf()scanf()%s的第一个空格(或匹配失败)停止。