最近,我一直在尝试从this website学习C ++。不幸的是,每当我尝试运行其中一个代码示例时,我会看到该程序打开大约半秒然后立即关闭。有没有办法阻止程序立即关闭,以便我可以看到我努力的成果?
答案 0 :(得分:135)
如果您正在使用Visual Studio,并且您正在从IDE启动控制台应用程序:
按 CTRL-F5 (启动而不调试)将启动应用程序并保持控制台窗口打开,直到您按任意键。
答案 1 :(得分:111)
编辑:正如Charles Bailey在下面的评论中正确指出的那样,如果在stdin
中缓存了某些字符,这将无效,并且确实没有好办法解决这个问题。如果您使用附加的调试器运行,John Dibling's suggested solution可能是解决您问题的最简洁的解决方案。
那就是说,我会把它留在这里,也许别人会觉得它很有用。在开发过程中编写测试时,我已经习惯了很多种类。
在main
功能结束时,您可以拨打std::getchar();
这将从stdin
获得单个字符,从而为您提供“按任意键以继续”某种行为(如果您确实需要“按任意键”消息,则必须打印一个自己)。
#include <cstdio>
需要getchar
。
答案 2 :(得分:100)
James的解决方案适用于所有平台。
或者在Windows
上,您也可以在从main
函数返回之前添加以下内容:
system("pause");
这将运行pause
命令,等待你按一个键并显示一条好消息Press any key to continue . . .
答案 3 :(得分:76)
如果您正在使用Microsoft的Visual C ++ 2010 Express并遇到问题, CTRL + F5 无法在程序终止后保持控制台处于打开状态,请查看this MSDN thread
可能你的IDE设置为在CTRL + F5运行后关闭控制台;事实上,Visual C ++ 2010中的“空项目”默认关闭控制台。要更改此设置,请按Microsoft主持人的建议进行操作:
请右键单击您的项目名称并转到“属性”页面,请展开“配置属性” - &gt;链接器 - &gt;系统,请在SubSystem下拉列表中选择Console(/ SUBSYSTEM:CONSOLE)。因为,默认情况下,Empty项目不指定它。
答案 4 :(得分:18)
我通常只在main()
的大括号上放一个断点。当通过断点将触及的任何方式到达程序的末尾时,您可以ALT-Tab到控制台窗口以查看输出。
答案 5 :(得分:14)
为什么不从控制台运行程序,即如果您使用的是Windows,则从cmd.exe运行程序。这样,程序结束后窗口就会保持打开状态。
[编辑]:当我使用KDevelop4时,在IDE底部的选项卡中运行了一个完全成熟的Bash(Linux CLI)实例。这就是我在这种情况下使用的内容。
答案 6 :(得分:9)
在代码结束之前,请插入以下行:
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
}
答案 7 :(得分:8)
拨打cin.get();
2次:
//...
cin.get();
cin.get();
return 0
}
答案 8 :(得分:4)
如果您从一个称职的IDE(例如Code::Blocks)运行代码,IDE将管理它用于运行代码的控制台,并在应用程序关闭时保持打开状态。您不希望添加特殊代码来保持控制台处于打开状态,因为当您在IDE之外使用它时,这将阻止它正常运行。
答案 9 :(得分:3)
好吧我猜你是在Windows上使用Visual Studio ......为什么?好吧,因为如果你在某种Linux操作系统上,那么你可能会从控制台运行它。
无论如何,您可以像其他人建议的那样在程序结尾添加垃圾,或者您只需点击 CTRL + F5 (无需调试即可启动),Visual Studio将在完成后退出控制台
如果你想运行Debug版本而不是在代码中添加crap,另一个选择是打开控制台窗口(开始 - >运行 - > cmd)并导航到调试输出目录。然后,只需输入您的可执行文件的名称,它将在控制台中运行您的调试程序。然后,如果您真的想要,可以使用Visual Studio的附加进行处理。
答案 10 :(得分:2)
对于Visual Studio(以及仅Visual Studio),以下代码段为您提供了“等待按键继续”提示,该提示真正等待用户明确按下新键,首先刷新输入缓冲区:
#include <cstdio>
#include <tchar.h>
#include <conio.h>
_tprintf(_T("Press a key to continue "));
while( _kbhit() /* defined in conio.h */ ) _gettch();
_gettch();
请注意,这使用tchar.h
宏与多个'字符集'兼容(如VC ++所称)。
答案 11 :(得分:2)
我这样做:
//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更好,但它有点罗嗦而且通常是不必要的。
答案 12 :(得分:2)
使用#include "stdafx.h"
&amp; 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");
}
答案 13 :(得分:2)
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
cout << "Press any key to continue...";
getch();
return 0;
}
我没有注意到其他人发布这个,所以在这里。
答案 14 :(得分:2)
只需在程序结束时添加以下内容即可。它将尝试捕获某种形式的用户输入,从而阻止控制台自动关闭。
cin.get();
答案 15 :(得分:2)
在任何exit()
功能之前或return
中的任何main()
之前添加以下行:
std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");
答案 16 :(得分:2)
如果您实际在Visual C ++中调试应用程序,请按F5或工具栏上的绿色三角形。如果你没有真正调试它(你没有设置断点),按Ctrl + F5或在菜单上选择Start Without Debugging(它通常在Debug菜单上,我同意这是令人困惑的。)它会快一点,更重要的是,你最终会停下来而不必改变你的代码。
或者,打开命令提示符,导航到exe所在的文件夹,然后键入其名称来运行它。这样,当它完成运行命令提示符时,不会关闭,您可以看到输出。我更喜欢这两种方法来添加代码来停止应用程序就像完成它一样。
答案 17 :(得分:1)
类似的想法 yeh 回答,只是极简主义的选择。
使用以下内容创建批处理文件:
helloworld.exe
pause
然后使用批处理文件。
答案 18 :(得分:0)
这里有一个问题,不是那么明显。不知何故,我在程序的最后一行添加了一个调试断点。 }
不知道我是怎么做到的,可能是在不同屏幕之间跳转时错误地点击了鼠标。我在 VS Code 中工作。
当我去调试时,系统立即跳转到那个断点。没有错误消息,没有临时输出,什么都没有。我想,程序是如何冲过我设置的所有断点的?这花了太长时间才弄明白。
显然系统将最后一行断点视为“第一个”停止点。简单的修复?删除那个断点,哦! (在这里插入额头巴掌。)
答案 19 :(得分:0)
只需在返回0之前使用cin.ignore();两次
main()
{
//your codes
cin.ignore();
cin.ignore();
return 0;
}
那就是
答案 20 :(得分:0)
你也可以尝试这样做
sleep (50000);
cout << "any text" << endl;
这将保存您的代码 50000m,然后打印消息并关闭。但请记住,它不会永远暂停。
答案 21 :(得分:0)
不是按下运行按钮,同时按下CTRL和F5,它会按下任意键继续消息。或者输入&#34;(警告使用此功能仅用于测试不是实际程序,因为防病毒不喜欢!!!!)&#34;在你的主要功能的最后,但是:(警告使用它只测试不是真正的程序,因为antiviruses不喜欢它!)
答案 22 :(得分:0)
我尝试在最后放置一个getchar()
函数。但它没有用。所以我所做的是一个接一个地添加两个getchar()
函数。我认为第一个getchar()
吸收了在最后一次数据输入后按下的 Enter 键。因此,请尝试添加两个getchar()
函数,而不是一个
答案 23 :(得分:0)
我使用了cin.get()
,但是有一天我需要在此之前使用另一个cin.get([Array Variable])
来获取一个空白字符的字符串。所以cin.get()
没有避免关闭命令提示窗口。最后我找到了另一种方式:
按 CTRL + F5 在外部窗口中打开,Visual Studio无法再对其进行控制。在最终命令运行后,你会问你关闭。
答案 24 :(得分:0)
简单地
int main(){
// code...
getchar();
getchar();
return 0;
}
答案 25 :(得分:0)
我在程序的最后一次返回0处设置断点。它工作正常。
答案 26 :(得分:0)
如果您运行的是Windows,则可以执行system("pause >nul");
或system("pause");
。它执行一个控制台命令来暂停程序,直到你按下一个键。 >nul
阻止其说Press any key to continue...
。
答案 27 :(得分:0)
您可以随时创建一个批处理文件。例如,如果您的程序名为helloworld.exe,则代码为:
@echo off
:1
cls
call helloworld.exe
pause >nul
goto :1
答案 28 :(得分:0)
这似乎运作良好:
cin.clear();
cin.ignore(2);
如果先清除缓冲区,则在阅读下一个缓冲区时不会出现问题。
出于某种原因,cin.ignore(1)
不起作用,必须为2。
答案 29 :(得分:0)
查看您的IDE是否在项目设置中有一个复选框,以便在程序终止后保持窗口打开。如果没有,请使用std::cin.get();
读取主函数末尾的字符。但是,一定要只使用基于行的输入(std :: getline)或者处理剩余的未读字符(std :: ignore直到换行),否则末尾的.get()只会读取你留下的垃圾早先未读。
答案 30 :(得分:-1)
您只需为x设置一个变量,然后在返回0;
之前输入cout<<"\nPress any key and hit enter to end...";
cin>>x;
答案 31 :(得分:-1)
您甚至可以在main()
函数的开头声明一个整数(比如int a;
),并在返回值之前放置std::cin >> a;
。因此程序将继续运行,直到您按下一个键并输入。
答案 32 :(得分:-2)
包含conio.h
,在代码末尾,return 0
之前,写下_getch();
答案 33 :(得分:-3)
以调试模式启动,使用F5运行代码 要停止您的控制台应用程序,请不要单击红叉,而是按CTRL-break 并且你将在程序结束时点击所有断点。
答案 34 :(得分:-3)
你也可以坚持
while(true)
;
或
for(;;)
;
最后。
答案 35 :(得分:-4)
只需将其放在代码的末尾:
while(1){}
此功能将一直持续(或直到您关闭控制台),并使控制台不会自行关闭。
答案 36 :(得分:-4)
最熟练的方法是离开
while (true) {
}
在程序执行的最后一个函数的末尾。
(如果某人不知道这意味着什么,它基本上是一个永无止境的循环。由于括号内没有任何内容,它将永远不会做任何事情,它实际上没有任何作用,但对于该计划来说,这是另一项任务。