提问者:小点点

使用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

当我使用存储它并使用显示它时,结果刚好弹出不到1秒,整个cmd窗口就消失了。在编译器中,它显示:下面是我的代码:

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个答案

匿名用户

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

(1)手动打开一个,找到你的可执行文件的位置,手动启动。那扇窗几乎保证关不上。

(2)或者,您可以在谷歌中搜索适当的选项,以便在IDE中设置相应的设置。

(3)在main()结束时,可以尝试从控制台读取,提示“按回车结束程序”。虽然这看起来是万无一失的,但实际上我并不鼓励这样做:如果没有传递文件名,许多有用的程序可以从标准输入读取数据,然后输出到标准输出。在不相关的诊断输出中混入,或者让一个基本的输入/处理/输出程序在提示时等待,都是不雅观的,并且使用户的生活变得更加困难。作为最低限度,在标准错误时要求输入,而不是在标准输出时要求输入,如果预期的输出没有任何EOF标记,那么只需接受一个空行作为EOF标记。然后,空行将是标准输入的一个要求,在标准输入中,例如来自重定向的文件。

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