while(scanf("%d",&n)!=EOF) / while(cin>>n)终止问题

问题的发现:(想要看干货可以直接跳过这段)

我最近刚了解到关于栈的用法,于是按照参考书寻找代码,并把它敲到电脑上。编译运行代码后发现无法终止,在网上查找各种资料,总结如下。

因为我的电脑是Windows和Mac双系统的所以都试了一遍。

Windows端:

在(Visual Studio 2019/Dev c++/CodeBlocks)上编译运行后可以用ctrl+z终止并可以显示出最后结果;编译后的exe文件按住ctrl+z后程序会直接退出,连显示都没有。

在clion上编译运行按ctrl+z没有用,编译后的exe程序也是会直接退出。

解决办法:

前三种在编译器里都可以运行,在编译后的exe文件如果要想使用可以在程序里(主函数里int main() )加入system("pause");

#include <stdio.h>
int main()
{
    你要写的代码
    while(scanf("%d",&n)!=EOF)
    {
        .....
    }
    system("pause"); //这一步至关重要
}

效果如下:

CLion的情况就比较麻烦,但也有解决办法

如果你编的是C语言:(规避CLion的bug)

#include <stdio.h>
int main()
{
    你的代码...
    while(scanf("%d",&n)!=EOF)
    {
        .....
        if (getchar() == '\n')     //这一步至关重要
        {
            break;
        }
    }
    return 0;
}

如果编译完效果如下:

但是编译完的exe文件,运行后还是会直接退出这时就应该在程序里(主函数里int main() )加入system("pause");

#include <stdio.h>
int main()
{
    你的代码...
    while(scanf("%d",&n)!=EOF)
    {
        .....
        if (getchar() == '\n')
        {
            break;
        }
    }
    system("pause");       //这一步至关重要
    return 0;
}

编译后效果如下:

如果你编的是C++语言:(规避CLion的bug)

#include <bits/stdc++.h>
using namespace std;
int main()
{
    你的代码...
    while(cin>>n)
    {
        .....
        if (cin.get() == '\n')  //这一步至关重要
        {
            break;
        }
    }
    return 0;
}

效果如下:

同样编译完的exe文件,运行后还是会直接退出这时就应该在程序里(主函数里int main() )加入system("pause");

#include <bits/stdc++.h>
using namespace std;
int main()
{
    你的代码...
    while(cin>>n)
    {
        .....
        if (cin.get() == '\n')
        {
            break;
        }
    }
    system("pause");   //这一步至关重要 
    return 0;
}

效果和C同样就不展示了。

Mac端:

Xcode:无论是在Xcode编译运行,还是在它编译后的文件上运行按住ctrl+d都可以运行。

效果如下:

CLion:在程序上按ctrl+d进程会直接结束,但是在它编译后的程序运行会显示正确结果

效果如下:

解决办法:

Xcode在Mac上的表现接近完美。

CLion可以在参考Windows上的解决办法。

猜你喜欢

转载自www.cnblogs.com/icesunbo/p/11312765.html