我试图从一些文本文件中获取一行而不是一个单词,直到它遇到空格,这里是源代码:
#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,但这不是我想要的。我只是想每次从文件中读取一行。
我该怎么做?
非常感谢。
答案 0 :(得分:3)
fgets()
是最方便的标准库函数,用于一次读取一行文件。 GNU getline()
更方便,但它是非标准的。
但是,如果您想使用scanf()
,则可以使用[
字段描述符代替s
来执行此操作:
char lineContent[100];
scanf("%99[^\n]", &lineContent);
getchar();
请注意,在遇到长行时,使用显式字段宽度来防止超出lineContent
的范围。另请注意,[
描述符与s
的不同之处在于[
不会跳过前导空格。如果保留前导空格对您来说很重要,那么scanf
s
字段是非首发。
getchar()
读取终止换行符,假设有一个换行符,scanf()
未读取99个字符而未到达行尾。
答案 1 :(得分:1)