C:按键终止程序

在C中,我通常使用getch()函数等待按下一个键然后结束程序,但是最近我读到了,因为它不是标准函数,所以使用它是不好的编程习惯。

所以不是以下内容:

 int main() { dosomething(); getch(); //wait for the user to see the results and press a key to end return 0; } 

我该怎么做才能更换getch

getc(stdin); 在这个意义上是便携的

使用非标准I / Ofunction本身并不是坏习惯; 如果您打算将此代码移植到不支持getch()的其他平台,则会出现问题。

问题是, 没有标准库函数可以检测单个击键( getchar()fgetc()被缓冲,并且要求你在返回之前按Enter键); 你将不得不使用非标准的东西来做到这一点。 如果您只打算在此特定平台上运行此代码,请使用getch()如果这是您需要的,请记住此解决方案不一定适用于其他平台。 如果您打算将此代码移植到不支持getch()平台,请在包装函数后面隔离特定于系统的调用,以便在移植代码时,只需要更改包装函数内的代码。

 int getKeystroke(void) { /** * Put platform-specific call here */ return getch(); } int main(void) { ... // do stuff here getKeystroke(); return 0; } 

您可以修复终端窗口不要消失。

getchar()是标准的,但是由于行缓冲,你仍然需要在getchar返回之前按Enter

我更喜欢从命令行运行程序。

我认为使用getch()是最常见的是保持控制台窗口关闭,但在C ++中,大多数有经验的程序员会建议你使用cin.get

  std::cin.get(); 

代替:

 getch(); 

您使用的是Turbo C编译器吗? getch()在那里被广泛使用。

OTOH如果你想让程序等待,在shell / terminal / prompt中运行二进制文件。 导航到该目录并调用

视窗:

 C:> executable.exe 

Linux的:

 ~$ ./exec 

你可以使用getchar() ,唯一的问题是它是缓冲的。 getch()缓冲。 你可以使getchar()也是非缓冲的,但是代码不值得。 我尝试了一次,但由于它的复杂性从未打扰过再次尝试。

除了其他答案,您还可以在Windows中使用它,特别是如果您打算等待按键完成程序:

 system("pause"); 

只是尝试回答不同的事情,你可以使用

while(1) sleep(10);

在main函数结束时( return 0;之前)然后你可以按ctrl-c来终止程序。 我认为你不应该面对可移植性问题,我希望这也是不错的编程实践:)