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

onl*_*227 3 c file-io gcc

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

#include <stdio.h>

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

  scanf("%s", &lineContent);
  printf("%s\n", lineContent);
}
Run Code Online (Sandbox Code Playgroud)

这是我的文本文件,名为 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
Run Code Online (Sandbox Code Playgroud)

我用以下命令运行它:

a.out < test.txt
Run Code Online (Sandbox Code Playgroud)

我的输出只是:

111
Run Code Online (Sandbox Code Playgroud)

我想要的是:

111 John Smith 100 98 1.2 2.5 3.6
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点?

非常感谢。

Joh*_*ger 5

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

但是,如果您想使用scanf(),则可以使用[字段描述符而不是s

char lineContent[100];

scanf("%99[^\n]", &lineContent);
getchar();
Run Code Online (Sandbox Code Playgroud)

请注意,使用显式字段宽度可以防止lineContent在遇到长行时超出边界。另请注意,[描述符的不同之处s在于[不跳过前导空格。如果保留前导空格对您很重要,那么scanf使用s字段是不可能的。

读取getchar()终止换行符,假设有一个,并且scanf()在未到达行尾的情况下未读取 99 个字符。