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

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值