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

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

 

因为我的电脑是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;
}

cin是终端输入,也被称之为标准输入(standard input),cin的主要功能就是从标准输入读入一个值。当从键盘上输入一串字符并按回车后,这些字符会首先被送到输入缓冲区中存储。每当按下回车键后,cin.get()就会检测缓冲区中是否有了可读的数据。

效果如下:

同样编译完的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上的解决办法,在while里插入if语句;或者直接在调试(Debug)里运行。