CLion 中与 EOF 有关问题的解决办法

在 CLion 中,写了一段程序,用于验证 getchar() != EOF 是 0 还是 1。

main() {
    int c;

    while (c = getchar() != EOF)
        printf("%d\n", c);
    printf("%d - at EOF\n", c);
}

1 问题描述

在 CLion 中运行后发现使用 ctrl + d 无法结束程序:

CLion 中的 CMake 配的是 MinGW。

MinGW,Minimalist GNU for Windows,是一个可自由使用和自由发布的 Windows 特定头文件和使用 GNU 工具集导入库的集合,允许我们在 GNU /Linux和 Windows 平台生成本地的 Windows 程序而不需要第三方 C 运行时( C Runtime)库。

2 解决方法

打开 clion 安装目录下的 /bin/idea.properties,修改 pty 为 false:

run.processes.with.pty=false

修改后, ctrl + d 可以正常结束程序了,但 printf() 打印方法要到程序结束后,才会一次性打印出来:

所以,这种方法仍然存在问题。

(2)解决方法 B:

把 /bin/idea.properties,修改 pty 为 true,然后重启后,用 debug 模式运行程序。

debug 模式,是以窗口形式运行程序,程序结束后,窗口就会自动关闭,看不到最后输出。所以在源代码中加了一段 while(1==1) 语句。

main() {
    int c;

    while (c = getchar() != EOF)
        printf("%d\n", c);
    printf("%d - at EOF\n", c);

    while(1==1){

    }
}

注意: 执行 ctrl + d 无效(用的是 MinGW),在 MinGW 编译环境内,必须使用 ctrl + c,这时程序会进入一个断点:

手动跳转该断点后,就会看到程序的最后输出:

注意:这里无法直接关闭窗口,必须到 Clion 中点击停止程序按钮,才能正确关闭:

编译环境换成 Cygwin 之后,就可以省略手动跳转断点的步骤,所以推荐使用 Cygwin

发布了636 篇原创文章 · 获赞 719 · 访问量 93万+

猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/104461278
EOF