问题的发现:(想要看干货可以直接跳过这段)
我最近刚了解到关于栈的用法,于是按照参考书寻找代码,并把它敲到电脑上。编译运行代码后发现无法终止,在网上查找各种资料,总结如下。
因为我的电脑是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)里运行。