我想使用fscanf()从一个文件中读取整行(包括空格)。该文件如下所示:
//data.txt
lek yuen
3
wo che
5
wo che
8
wo che
5
wo che
7
sha kok
0
hin keng
9
lung hang
8
sha kok
2
sha kok
4
lung hang
8
当我使用
int main() {
FILE *fp=fopen("data.txt","r");
char buffer[255];
if(fp==NULL){
perror("File not exist!\n");
exit(1);
}
fscanf(fp,"%[^\n]s",&buffer);
printf("%s",buffer);
fclose(fp);
return 0;
}
有人知道发生了什么吗?非常感谢!
如果您担心终端窗口消失:
(1)手动打开一个,找到你的可执行文件的位置,手动启动。那扇窗几乎保证关不上。
(2)或者,您可以在谷歌中搜索适当的选项,以便在IDE中设置相应的设置。
(3)在main()结束时,可以尝试从控制台读取,提示“按回车结束程序”。虽然这看起来是万无一失的,但实际上我并不鼓励这样做:如果没有传递文件名,许多有用的程序可以从标准输入读取数据,然后输出到标准输出。在不相关的诊断输出中混入,或者让一个基本的输入/处理/输出程序在提示时等待,都是不雅观的,并且使用户的生活变得更加困难。作为最低限度,在标准错误时要求输入,而不是在标准输出时要求输入,如果预期的输出没有任何EOF标记,那么只需接受一个空行作为EOF标记。然后,空行将是标准输入的一个要求,在标准输入中,例如来自重定向的文件。
如果你想知道为什么只打印一行:这是因为你只打印了一个-)。正如Gerhard所说的,使用循环来读取并打印多行。事实上,对于像这样的文件格式,行并不是特别的;只需读取“单词”(空格之间的字符),如果你能确定单词不包含空格,并且总是有两个,那么就是一个数字。