2011-09-21 97 views
1

我目前正在从名为'Ivor Hortons Beginning Visual C++ 2010'的书中学习C++。使用getch()来保持命令提示符打开Visual C++ 2010

在我到目前为止所尝试的所有例子中,我不得不使用getch()来保持打开命令提示符,并且有时从主方法的结尾删除返回0语句。

这是一个虚无of windows的Windows 7,它会引起更多的问题吗?这样做目前没有问题,但由于这不包括在书中,我想知道它是否可能是我设置错误的东西。

非常感谢:)

+3

错以什么方式?另外,如果你点击CTRL + F5,控制台会在应用程序终止时自动为你打开。 – Jon

+0

CTRL + F5不启动调试器。 – ChrisV

+1

您应该更好地使用cin.get(),因为getch()不是标准函数,因此不可移植。 – PlasmaHH

回答

1

getch()不特定于操作系统,但它不是直接移植。在C++中执行此操作的首选方法是使用std::cin.get();

main功能可以return 0隐式(你不需要真正拥有该代码,见下文)。

int main() 
{ 
    // valid, return 0 implied. 
} 

约从main隐含return 0更多详细信息,请参阅this question

+0

'getch()'甚至不是Windows函数;它是从MS-DOS剩下的。 (在Windows下:在Unix上,它是curses的一部分。) –

+0

足够公平,已编辑。 – Chad

1

程序结束后,该程序创建的任何资源(包括终端窗口)都将被释放。通过使用getch可以防止程序结束。这是正常的行为,应该继续这种方式,直到Windows是一个遥远的记忆。

如果您从一个已经存在的命令窗口中启动该程序,该窗口将关闭而不是,因为它不是由程序创建的。

+0

控制台窗口是**不**是程序创建的资源;因为程序结束,绝对没有理由关闭它。 –

+0

@詹姆斯,如果没有现成的程序,代表程序创建控制台窗口。我不知道Windows是否会执行它,或者如果C++运行时执行它,我不在乎 - 它仍然属于正在执行的程序。 –

+0

它由Visual Studios创建。如果您从控制台窗口调用应用程序,则不会创建它。它属于视觉工作室(Visual Studios确实应该采取措施保持开放)。 –

0

首先,getch()不是标准的C或C++函数。即使在Windows的 下,我认为它的使用已被废弃;它的语义返回到CP/M 和早期的MS-DOS。其次,它确实没有必要,至少不用于控制台应用程序(并且我不认为它适用于非控制台应用程序)。如果您从控制台窗口运行程序 ,窗口保持打开状态。如果你是从Visual Studios运行它的 ,那么在 return语句中设置一个断点是很简单的,它会阻止程序并保持窗口打开 (尽管IDE仅仅因为 而没有理由关闭它你的程序已经终止)。

+0

当你双击程序启动它时呢?这不符合你所概述的任何一种情况。 –

+0

@Mark Ransom您不要双击启动控制台应用程序。一旦开发完成,您可以从控制台调用它们。或者从批处理脚本中获取,希望以更优雅的方式处理事物。 –

+0

为什么不能?它可能不是最佳的,但它工作得很好。 –

相关问题