【问题标题】:Using fscanf() to read data and the output result just immediately disappeared使用 fscanf() 读取数据,输出结果立即消失
【发布时间】:2020-07-03 07:11:45
【问题描述】:

我想使用 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;
}

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

【问题讨论】:

  • 命令窗口可能会消失,因为您从某个 IDE 运行程序并且程序刚刚完成。您只需阅读一行并打印它。如果你想阅读多行,循环会派上用场。
  • 可能你在windows下,所以在执行结束时windows是关闭的,只需要在最后读取一个char/line来阻塞你的程序
  • 顺便说一句:对于fscanf,您应该使用buffer 而不是&buffer。它已经具有正确的地址类型。
  • @bruno Weelll,如果您不能信任用户输入,它可能会更安全。小鲍比桌...
  • @bruno 所以不要告诉人们将用户输入用作格式字符串;-)。

标签: c scanf


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-11-02
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多