我想使用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
[当我使用buffer
存储它并使用printf()
显示它时,结果lek yuen
弹出不到1秒,整个cmd窗口消失了。在编译器中,它表明:Process finished with exit code 0 .
下面是我的代码:
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)或者,您可以在Google上搜索相应的选项,以在IDE中设置相应的设置。
((3)在main()的末尾,您可以尝试从控制台读取并提示输入“ hit enter to end the program”。如此看来,万无一失,但实际上我不希望这样做:如果没有传递文件名,许多有用的程序可以从标准输入中读取,然后输出到标准输出中。混入无关的诊断输出,或使必要的输入/处理/输出程序及时提示,这是不雅的,并且使用户的生活变得不必要。至少,要求输入标准错误,而不是标准输出,如果期望的输出没有任何内容,只需接受一个空行作为EOF标记。那么空行将成为标准输入的要求,例如从重定向的文件中。
[如果您想知道为什么只打印一行,那是因为您只打印了一行;-)。正如Gerhard所说,使用循环读取和打印多行。实际上,使用像这样的文件格式并不特别;如果可以确保单词不包含空格,并且始终有两个,然后是一个数字,则只需阅读“单词”(空格之间的字符)即可。