美文网首页C语言
CLion 中与 EOF 有关问题的解决办法

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

作者: deniro | 来源:发表于2020-02-23 15:46 被阅读0次

    在 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() 打印方法要到程序结束后,才会一次性打印出来:


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

    解决方法 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

    相关文章

      网友评论

        本文标题:CLion 中与 EOF 有关问题的解决办法

        本文链接:https://www.haomeiwen.com/subject/qsnlqhtx.html