最近,我一直在尝试从中学习C ++ 这个网站. 。不幸的是,每当我尝试运行一个代码示例时,我都会看到该程序打开了大约半秒,然后立即关闭。有没有办法阻止该程序立即关闭,以便我可以看到我的努力果实?

有帮助吗?

解决方案

编辑: 正如查尔斯·贝利(Charles Bailey)正确地在下面的评论中指出的那样,如果有字符被缓冲,这将行不通 stdin, ,而且确实没有一个好方法可以解决这个问题。如果您正在附上调试器, 约翰·迪布林(John Dibling)的建议解决方案 可能是解决问题的最干净的解决方案。

也就是说,我将留在这里,也许其他人会发现它有用。在开发过程中编写测试时,我将其用作快速入侵。


在你的结尾 main 功能,您可以致电 std::getchar();

这将从中获得一个字符 stdin, ,从而为您提供“按下任何继续进行的键”的行为(如果您实际上想要一条“任何键”消息,则必须自己打印一条)。

你需要 #include <cstdio> 为了 getchar.

其他提示

如果您使用的是Visual Studio,并且正在从IDE启动控制台应用程序:

紧迫 CTRL-F5 (无需调试即可开始)将启动应用程序并保持控制台窗口打开,直到按任何键为止。

詹姆斯的解决方案适用于所有平台。

另外 Windows 您还可以在返回之前添加以下内容 main 功能:

  system("pause");

这将运行 pause 等待直到您按键并显示一个不错的消息的命令 Press any key to continue . . .

如果您正在使用Microsoft的Visual C ++ 2010 Express,并遇到了问题 CTRL+F5 程序终止后不工作以保持控制台打开,请看一下 此MSDN线程.

CTRL+F5运行后,您的IDE可能设置为关闭控制台;实际上,Visual C ++ 2010中的一个“空项目”默认情况下关闭了控制台。要更改此操作,请按照Microsoft主持人的建议做:

请右键单击您的项目名称,然后转到属性页面,请扩展配置属性 - >链接器 - >系统,请在子系统下拉列表中选择控制台(/子系统:控制台)。因为,默认情况下,空项目未指定它。

我通常只是在断点 main()闭合的卷发。当通过任何方式达到程序的末端时,断点将击中,并且您可以将其alt-tab到控制台窗口以查看输出。

为什么不只是从控制台运行程序,即如果您使用Windows,请从CMD.EXE运行程序。这样,在程序完成后,窗口保持打开状态。

编辑]:当我使用kDevelop4时,在IDE底部的一个选项卡中运行了一个bash(linux cli)的实例。这就是我在这种情况下使用的。

在代码结束之前,插入以下行:

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中运行代码,例如 代码::块, ,IDE将管理它用于运行代码的控制台,并在应用程序关闭时保持其打开状态。您不想添加特殊代码以保持控制台打开,因为当您将其用于真实的IDE外,这将阻止其正确运行。

好吧,我猜您使用Visual Studio在Windows上...为什么?好吧,因为如果您使用某种Linux操作系统,那么您可能会从控制台运行它。

无论如何,您可以像其他人建议的那样在程序的末尾添加废话,或者您可以击中 CTRL + F5 (无需调试即可开始),视觉工作室将完成一旦完成。

如果要运行调试版本并且不在代码中添加废话的另一个选项是打开控制台窗口(start-> run-> cmd)并导航到您的 调试输出目录. 。然后,只需输入可执行文件的名称,它将在控制台中运行您的调试程序。然后,您可以使用Visual Studio的附件进行过程或其他想法。

如果您实际上是在Visual C ++中调试应用程序,请按F5或工具栏上的绿色三角形。如果您没有真正调试它(您没有断点设置),请按CTRL+F5或在不进行菜单上调试的情况下选择“启动”(通常在调试菜单上,我同意这很困惑。)更重要的是,最终将暂停,而无需更改代码。

或者,打开命令提示符,导航到EXE所在的文件夹,然后通过键入名称来运行它。这样,运行命令提示符完成后就不会关闭,您可以看到输出。我更喜欢这两种方法,而是添加可以停止应用程序完成的代码。

只需在程序结束时添加以下内容即可。它将尝试捕获某种形式的用户输入,从而阻止控制台自动关闭。

cin.get();

在任何之前添加以下行 exit() 功能或任何之前 returns in main():

std::cout << "Paused, press ENTER to continue." << std::endl;
cin.ignore(100000, "\n");

对于Visual Studio(和仅视觉工作室),以下代码片段为您提供了“等待Keypress继续继续”提示,该提示确实等待用户按下 新的 钥匙明确,首先冲洗输入缓冲区:

#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 ++称为它们)。

我只是这样做:

//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更好,但是它有点言语,通常不必要。

利用 #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");
}
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{

    cout << "Press any key to continue...";
    getch();

    return 0;
}

我没有注意到其他任何人都发布了此信息,所以在这里。

类似的想法 是的 答案,只是极简主义的选择。

创建一个带有以下内容的批处理文件:

helloworld.exe
pause

然后使用批处理文件。

查看您的IDE是否在项目设置中具有复选框,以在程序终止后保持窗口打开。如果没有,请使用 std::cin.get(); 在主函数末尾读取字符。但是,请确保仅使用基于行的输入(std :: getline)或处理剩余的未读字符(否则否则newline直到newline),因为否则最终的.get()只会读取您剩下的垃圾较早未读。

这似乎很好:

cin.clear();
cin.ignore(2);

如果您首先清除缓冲区,则在阅读下一个缓冲区时不会有问题。由于某些原因 cin.ignore(1) 不起作用,必须是2。

您总是可以创建一个批处理文件。例如,如果您的程序称为helloworld.exe,则某些代码将是:

@echo off
:1
cls
call helloworld.exe
pause >nul
goto :1

如果您正在运行Windows,那么您可以做 system("pause >nul"); 或者 system("pause");. 。它执行控制台命令以暂停程序,直到按键为止。 >nul 阻止它说 Press any key to continue....

我在程序的最后一个返回0上放了一个断点。它可以正常工作。

简单地

int main(){
    // code...
    getchar();
    getchar();
    return 0;
}

我用了 cin.get() 这是有效的,但是有一天我需要使用另一个 cin.get([Array Variable]) 在此之前,要在中间抓住一个带有空白字符的字符串。所以 cin.get() 没有避免命令提示窗口关闭。终于我找到了另一种方法:按 CTRL+F5 在外部窗口和Visual Studio中打开不再控制它。只是会问您有关在最终命令运行后关闭的信息。

我试图放一个 getchar() 末尾的功能。但这没用。所以我所做的就是添加两个 getchar() 一个接一个的功能。我认为第一个 getchar() 吸收 进入 键在最后一个数据输入之后按下。所以尝试添加两个 getchar() 功能而不是一个

它不会同时按CTRL和F5,而不是按下运行按钮,它将为您按下任何键继续消息。或键入“(警告仅用于测试实际程序,因为反病毒不喜欢它!!!)”在您的主要功能的末尾: '喜欢它!!!!)

只需在返回0之前使用cin.ignore();两次

main()
  {
  //your codes 

  cin.ignore();
  cin.ignore();

  return 0;
  }

就这样

所有您必须为X设置变量,然后在返回0之前输入此内容;

cout<<"\nPress any key and hit enter to end...";
cin>>x;

您甚至可以在开始时声明一个整数 main() 功能(说 int a;)并放 std::cin >> a; 就在返回值之前。因此,该程序将继续运行,直到按键输入为止。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top