C:按键终止程序

时间:2009-10-26 12:18:11

标签: c

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

所以不是以下内容:

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

如何更换getch

9 个答案:

答案 0 :(得分:8)

getc(stdin); 从这个意义上说是便携式的

答案 1 :(得分:4)

使用非标准I / O功能本身是不错的做法;如果您打算将此代码移植到不支持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;
}

答案 2 :(得分:2)

您可以修复终端窗口,使其不会消失。

答案 3 :(得分:1)

getchar()是标准配置,但由于线路缓冲,您仍需要在Enter返回前按getchar

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

 std::cin.get();

而不是:

getch();

答案 6 :(得分:0)

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

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

<强>窗:

C:> executable.exe

<强> Linux的:

~$ ./exec

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

答案 7 :(得分:0)

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

system("pause");

答案 8 :(得分:0)

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

while(1) sleep(10);

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