在C中,我通常使用getch()
函数来等待按键然后结束程序,但是最近我读到了,因为它不是标准函数,所以使用它是不好的编程习惯。
所以不是以下内容:
int main() {
dosomething();
getch(); //wait for the user to see the results and press a key to end
return 0;
}
如何更换getch
?
答案 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终止程序。我认为你不应该面对可移植性问题,我希望这也不错编程实践:)