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来终止程序。 我认为你不应该面对可移植性问题,我希望这也是不错的编程实践:)