我刚开始学习 c++,在阅读http://www.dev-hq.net/c++/1--the-basics中的 c++ 教程时,我发现在某些文本编辑器中编写 c++ 程序与在视觉中编写程序不同c++。它说类似“Visual C++ 在大多数情况下需要在'main'函数结束之前暂停某种应用程序,因为它会生成一个在执行后会消失的窗口”。这是什么意思?
4 回答
简短的回答:这不是强制性的。该站点建议在程序退出之前可以看到控制台窗口中的输出(从而关闭窗口)。
长答案:如果您使用IDE开发没有 GUI 的 C++ 或 C 程序,则 IDE 通过启动控制台/终端窗口(也称为命令提示符)显示输出。当您的程序启动并在程序结束时立即关闭时,将显示此窗口。说如果你只是打印“你好,世界!” 并且不要暂停,终端窗口会打开,显示Hello, world! 并立即关闭,一切都在眨眼之间。所以习惯上在最后插入一个停顿。并非所有 IDE 都出现此问题。有些在其自己的集成窗口中显示输出,有些通过脚本插入暂停行为等。
应该理解,这只是使窗口停留的一种技巧,从程序的角度来看,这样做的阻塞调用是没有用的。也不要使用system("pause");
它,因为它有问题,除了它不可移植并且只能在 Windows 平台上运行。
#include <iostream>
#include <limits>
int main()
{
std::cout << "Press ENTER(s) to exit...";
// flush data in cin's buffer
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// blocking call to fresh input from user
std::cin.get();
}
这将是一种可移植的方式,即无论您使用的平台如何,它都可以工作。
另一种方法是按照 Raja 的建议设置断点。它还将让您在学习调试器时沾沾自喜,调试器是编程中必不可少的工具。
为了完全避免这个问题,您可以从控制台窗口自己运行程序。虽然有时对于初学者来说可能会有点乏味,但手动编译代码并在没有 IDE 的情况下自己运行它会给你更多的洞察力,并且是一种很好的学习体验。
我仍然建议手动编译或调试断点方法,而不是在程序中注入虚假的暂停/阻塞调用;请注意,从用户那里收到的输入只是被忽略了,并且从未在程序中进一步使用,因此从程序的角度来看是多余的,因此建议不要使用它。
当您使用“运行项目”(经典的 Visual-C++ 键绑定中的 Ctrl+F5,而不仅仅是 F5,即“调试项目”)时,Visual Studio 将保持您的控制台窗口打开,直到您按下按钮。
只有当您使用“调试项目”时它才不会。这是有道理的,因为您通常只想在实际寻找问题时使用该选项(启动和关闭时间更长并且运行速度更慢),在这种情况下,您可能在程序中设置了断点并且可以简单地在 的最后一行设置一个main()
。
因此,所有建议的解决方法以及对 Visual Studio 的抨击都是不必要和错误的。
这只是意味着可执行窗口将在执行完成后立即关闭。
我建议在您之前使用getchar();
标准库(<iostream>
或<stdio.h>
标头)中的简单语句return 0;
。这意味着您必须按一个键才能关闭窗口。正如您提到的 Visual C++,system("pause");
在 Windows 系统返回之前也可以正常工作。
当然,如果您较早地从 main 返回(常见于错误代码、未处理的异常或某处的退出调用),您可能无法使用该暂停机制。当你刚刚开始时,你现在不太可能遇到这些东西。
从命令行运行程序也可以查看输出。
这是我用来暂停控制台应用程序并让我查看结果的东西:
void waitForUser()
{
// if for some reason cin is in invalid state
// we need to clear it
std::cin.clear();
// if we used cin to input something it is likely to
// contain trailing \n symbols , we need to get rid of them
std::cin.ignore( std::cin.rdbuf()->in_avail() );
// we wait for a user to hit Enter here
std::cin.get();
}
只需在末尾调用此函数即可main