使用fscanf()读取数据,输出结果立即消失

问题描述 投票:0回答:1

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

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

c scanf
1个回答
0
投票

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

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

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

((3)在main()的末尾,您可以尝试从控制台读取并提示输入“ hit enter to end the program”。如此看来,万无一失,但实际上我不希望这样做:如果没有传递文件名,许多有用的程序可以从标准输入中读取,然后输出到标准输出中。混入无关的诊断输出,或使必要的输入/处理/输出程序及时提示,这是不雅的,并且使用户的生活变得不必要。至少,要求输入标准错误,而不是标准输出,如果期望的输出没有任何内容,只需接受一个空行作为EOF标记。那么空行将成为标准输入的要求,例如从重定向的文件中。

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

© www.soinside.com 2019 - 2024. All rights reserved.