c - 使用 fscanf() 读取数据,输出结果立即消失
问题描述
我想使用 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) 或者,您可以在 IDE 中搜索正确的选项来设置相应的设置。
(3)在main()结束时,可以尝试从控制台读取,提示“按回车键结束程序”。尽管这看起来很简单,但我实际上并不鼓励它:如果没有传递文件名,许多有用的程序可以从标准输入中读取,并输出到标准输出。混入不相关的诊断输出,或让重要的输入/处理/输出程序在提示符下等待,是不雅的,并且使用户的生活变得比必要的更难。作为最低要求,要求输入标准错误,而不是标准输出,如果您的预期输出没有任何内容,则只需接受一个空行作为 EOF 标记。然后,该空行将成为标准输入的要求,例如来自重定向文件。
如果您想知道为什么只打印一行:那是因为您只打印了一行 ;-)。正如 Gerhard 所说,使用循环来读取和打印多行。事实上,像这样的文件格式行并没有什么特别之处;如果您可以确定单词不包含空格,并且总是有两个,那么只需阅读“单词”(空格之间的字符),然后是一个数字。
推荐阅读
- scala - 将 ZipWith Outlet 连接到另一个 ZipWith 作为 Inlet
- input - 用户输入的音频流
- c++ - Mojave 上 SDL_CreateRenderer() 的“无效上下文 0x0”?
- java - 使用 Java 找出独特的因素
- mysql - mysql查询中的多表内连接
- python - Python 无需我询问就使用多核
- influxdb - 如何在 InfluxDB 测量中存储版本化数据?
- javascript - 使整个 BS4 导航栏(在小屏幕上)区域可点击,因此在您触摸的任何地方,它都会显示/隐藏子菜单?
- python - 如何使 python 包可从 sublime3、visual studio 代码等文本编辑器调用?
- spring - 使用 Spring AOP 获取特定的标头参数?