首页 > 解决方案 > 使用 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;
}

有谁知道发生了什么?非常感谢!

标签: cscanf

解决方案


如果您担心终端窗口消失:

(1)手动打开一个,找到你的可执行文件的位置并手动启动它。该窗口几乎可以保证不会关闭。

(2) 或者,您可以在 IDE 中搜索正确的选项来设置相应的设置。

(3)在main()结束时,可以尝试从控制台读取,提示“按回车键结束程序”。尽管这看起来很简单,但我实际上并不鼓励它:如果没有传递文件名,许多有用的程序可以从标准输入中读取,并输出到标准输出。混入不相关的诊断输出,或让重要的输入/处理/输出程序在提示符下等待,是不雅的,并且使用户的生活变得比必要的更难。作为最低要求,要求输入标准错误,而不是标准输出,如果您的预期输出没有任何内容,则只需接受一个空行作为 EOF 标记。然后,该空行将成为标准输入的要求,例如来自重定向文件。

如果您想知道为什么只打印一行:那是因为您只打印了一行 ;-)。正如 Gerhard 所说,使用循环来读取和打印多行。事实上,像这样的文件格式行并没有什么特别之处;如果您可以确定单词不包含空格,并且总是有两个,那么只需阅读“单词”(空格之间的字符),然后是一个数字。


推荐阅读