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

标签 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,但这不是我想要的。每次从文件中读取时,我只想读取一整行。

我该怎么做?

非常感谢。

最佳答案

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

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

char lineContent[100];

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

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

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

关于c - 如何使用<从文本文件中读取一整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41861208/

相关文章:

python - fp.readlines() 是否关闭文件?

java - 如何在不出现内存不足错误的情况下将应用程序 Assets 文件夹中的大文件写入 SD 卡?

c - 如何在c中使用指针与字符进行比较?

客户端/服务器 pthreads 程序未在 Valgrind 下执行。正常运行

c - 未初始化的 DWORD 变量给出随机值?

c++ - 从函数指针创建 boost::function 的跨平台方式

c++ - 使用 g++-5 时,protobuf 不会在 osx 上编译

java - File.length() 显然报告了错误的文件大小

c - 错误: Expected unqualified-id before numeric constant

c - 将字符串传递给 C 中的函数