最近,我一直在尝试从该网站学习C ++ 。不幸的是,每当我尝试运行其中一个代码示例时,我都会看到该程序打开大约半秒钟,然后立即关闭。有没有办法阻止程序立即关闭,以便我可以看到自己的努力成果?
最近,我一直在尝试从该网站学习C ++ 。不幸的是,每当我尝试运行其中一个代码示例时,我都会看到该程序打开大约半秒钟,然后立即关闭。有没有办法阻止程序立即关闭,以便我可以看到自己的努力成果?
Answers:
编辑: 正如查尔斯·贝利(Charles Bailey)在下面的评论中正确指出的那样,如果在中缓冲了字符,则此方法将无效stdin
,并且实际上没有解决此问题的好方法。如果您运行的是带有调试器的设备,则John Dibling建议的解决方案可能是解决问题的最干净的解决方案。
就是说,我将其留在这里,也许其他人会发现它有用。在开发过程中编写测试时,我经常使用它作为各种技巧。
在main
功能结束时,您可以调用std::getchar();
这将从中获得一个字符stdin
,从而为您提供“按任意键继续”的行为(如果您实际上想要“按任意键”消息,则必须自己打印一个)。
你需要#include <cstdio>
的getchar
。
getchar
不能解决问题-或至少在有限的情况下。它从中读取一个char stdin
,但是如果已经从stdin中缓冲了字符,则无论您是否打印提示,该程序都将继续运行而无需等待。
\n
是部分解决方案,但是如果缓冲了多行输入,将无济于事。我不知道从输入流中清除所有内容的标准C ++方法。:-/
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
使用#include <limits>
。
如果您使用的是Visual Studio,并且正在从IDE中启动控制台应用程序,则:
按CTRL-F5(无需调试即可启动)将启动应用程序,并使控制台窗口保持打开状态,直到您按任意键。
James的解决方案适用于所有平台。
或者,Windows
您也可以在从main
函数返回之前添加以下内容:
system("pause");
这将运行pause
命令,直到您按下一个键并显示一条好消息Press any key to continue . . .
如果您使用的是Microsoft的Visual C ++ 2010 Express,并且在程序终止后遇到CTRL + F5无法使控制台保持打开状态的问题,请查看此MSDN线程。
您的IDE可能设置为在运行CTRL + F5之后关闭控制台。实际上,Visual C ++ 2010中的“空项目”默认情况下会关闭控制台。要更改此设置,请按照Microsoft主持人的建议进行操作:
请右键单击您的项目名称,然后转到“属性”页面,请展开“配置属性”->“链接器”->“系统”,然后在“子系统”下拉列表中选择“控制台(/ SUBSYSTEM:CONSOLE)”。因为默认情况下,Empty项目没有指定它。
为什么不直接从控制台运行程序,即如果使用Windows,则从cmd.exe运行程序。这样,程序完成后窗口将保持打开状态。
[编辑]:当我使用KDevelop4时,IDE底部的选项卡中运行着一个完整的Bash实例(Linux CLI)。我在这种情况下使用的是哪种。
main
,但是如果我没有在命令行上显式设置它,则在应用程序退出时VS会杀死该窗口。 感叹
main
在项目中定义,则链接器默认情况下使用CONSOLE子系统。在调试或运行时,您将获得一个控制台窗口。但是,除非您在项目属性中明确指定CONSOLE作为子系统,否则Visual Studio将不会保持控制台窗口打开。我总是从一个空项目开始,很少更改单个项目的属性,所以我从未见过控制台窗口会停留在周围。抱歉给您带来困惑
在代码末尾之前,插入以下行:
system("pause");
这将保留控制台,直到您按下某个键为止。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
cout << "Please enter your first name followed by a newline\n";
cin >> s;
cout << "Hello, " << s << '\n';
system("pause"); // <----------------------------------
return 0; // This return statement isn't necessary
}
通话cin.get();
2次:
//...
cin.get();
cin.get();
return 0
}
如果从功能强大的IDE(例如Code :: Blocks)运行代码,则IDE将管理用于运行代码的控制台,并在应用程序关闭时保持打开状态。您不想添加特殊代码来保持控制台打开,因为当您在IDE之外将其用于实际环境时,这将阻止其正常运行。
好的,我猜您是在Windows上使用Visual Studio ...为什么?好吧,因为如果您使用的是某种Linux操作系统,则可能会从控制台运行它。
无论如何,您可以像其他人建议的那样将废话添加到程序的末尾,或者只需按CTRL + F5(无需调试即可启动),一旦完成,Visual Studio就会退出控制台。
如果要运行Debug版本而不向代码添加废话,另一种选择是打开控制台窗口(开始->运行-> cmd)并导航到调试输出目录。然后,只需输入可执行文件的名称,它将在控制台中运行调试程序。然后,您可以使用Visual Studio的附加程序进行处理,或者如果您确实需要的话。
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
cout << "Press any key to continue...";
getch();
return 0;
}
我没有注意到其他人张贴了这篇文章,所以在这里。
conio.h
是Windows特定的头文件,可能并非在每台机器上都可用(或者您可能需要单独链接它,这太过分了)。
在以下任何exit()
函数之前或中的任何return
s 之前添加以下行main()
:
std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");
我只是这样做:
//clear buffer, wait for input to close program
std::cin.clear(); std::cin.ignore(INT_MAX, '\n');
std::cin.get();
return 0;
注意:清除cin缓冲区等仅在您在程序的早期使用cin时才需要。同样使用std :: numeric_limits :: max()可能比INT_MAX更好,但是它有点罗word,通常是不必要的。
使用#include "stdafx.h"
&system("pause");
就像下面的代码一样。
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
std::cout << "hello programmer!\n\nEnter 2 numbers: ";
int x, y;
std::cin >> x >> y;
int w = x*y;
std::cout <<"\nyour answer is: "<< w << endl;
system("pause");
}
system
被声明为<cstdlib>
,而不是stdafx.h
。
只是
#include <cstdio>
int main(){
// code...
std::getchar();
std::getchar();
return 0;
}
由于某些原因,运行程序时,通常在stdin中已经可以使用getchar读取1个字符。因此,第一个getchar读取此字符,第二个getchar在退出程序之前等待用户(您的)输入。并且在程序退出大多数终端后,尤其是在Windows上,请立即关闭终端。因此,我们的目标是防止程序在输出所有内容后完成的简单方法。当然,有更复杂,更干净的方法可以解决此问题,但这是最简单的。
如果您正在运行Windows,则可以执行system("pause >nul");
或system("pause");
。它执行控制台命令来暂停程序,直到您按下某个键。>nul
阻止它说话Press any key to continue...
。
我在程序的最后一个返回0处放置一个断点。它工作正常。
我尝试将getchar()
函数放在最后。但这没有用。所以我要做的是getchar()
一个接一个地添加两个功能。我认为第一个getchar()
吸收Enter了最后一个数据输入后按下的键。因此,请尝试添加两个getchar()
函数而不是一个
只需在返回0之前使用cin.ignore();两次
main()
{
//your codes
cin.ignore();
cin.ignore();
return 0;
}
就这样