37

如何创建一个 void 函数,该函数将在 C 中用作“按任意键继续”?

我想做的是:

printf("Let the Battle Begin!\n");
printf("Press Any Key to Continue\n");
//The Void Function Here
//Then I will call the function that will start the game

我正在使用 Visual Studio 2012 进行编译。

4

5 回答 5

51

使用 C 标准库函数getchar(),因为getch()它不是标准函数,由Borland TURBO C提供,仅用于 MS-DOS/Windows。

printf("Let the Battle Begin!\n");
printf("Press Any Key to Continue\n");  
getchar();    
 

在这里,getchar()希望您按回车键,因此printf语句应该是press ENTER to continue. 即使您按另一个键,您仍然需要按 ENTER:

printf("Let the Battle Begin!\n");
printf("Press ENTER key to Continue\n");  
getchar();    

如果您使用的是 Windows,那么您可以使用getch()

printf("Let the Battle Begin!\n");
printf("Press Any Key to Continue\n");
getch();   
//if you press any character it will continue ,  
//but this is not a standard c function.

char ch;
printf("Let the Battle Begin!\n");
printf("Press ENTER key to Continue\n");    
//here also if you press any other key will wait till pressing ENTER
scanf("%c",&ch); //works as getchar() but here extra variable is required.      
于 2013-09-14T12:11:18.713 回答
20

您没有说您使用的是什么系统,但由于您已经有了一些可能适用于 Windows 的答案,也可能不适用于 Windows,因此我将为 POSIX 系统回答。

在 POSIX 中,键盘输入来自称为终端接口的东西,默认情况下,它会缓冲输入行,直到按下 Return/Enter,以便正确处理退格。您可以使用 tcsetattr 调用来更改它:

#include <termios.h>

struct termios info;
tcgetattr(0, &info);          /* get current terminal attirbutes; 0 is the file descriptor for stdin */
info.c_lflag &= ~ICANON;      /* disable canonical mode */
info.c_cc[VMIN] = 1;          /* wait until at least one keystroke available */
info.c_cc[VTIME] = 0;         /* no timeout */
tcsetattr(0, TCSANOW, &info); /* set immediately */

现在,当您从 stdin(使用getchar()或任何其他方式)读取时,它将立即返回字符,而无需等待 Return/Enter。此外,退格将不再“起作用”——您将在输入中读取一个实际的退格字符,而不是删除最后一个字符。

此外,您需要确保在程序退出之前恢复规范模式,否则非规范处理可能会对您的 shell 或调用程序的人造成奇怪的影响。

于 2013-09-14T21:40:34.017 回答
3

使用getch()

printf("Let the Battle Begin!\n");
printf("Press Any Key to Continue\n");
getch();

Windows 替代方案应该是_getch()

如果您使用的是 Windows,这应该是完整的示例:

#include <conio.h>
#include <ctype.h>

int main( void )
{
    printf("Let the Battle Begin!\n");
    printf("Press Any Key to Continue\n");
    _getch();
}

PS 正如@Rörd 所指出的,如果您使用的是 POSIX 系统,则需要确保 curses 库设置正确。

于 2013-09-14T11:55:30.040 回答
1

尝试这个:-

printf("Let the Battle Begin!\n");
printf("Press Any Key to Continue\n");
getch();

getch()用于从控制台获取字符但不回显到屏幕。

于 2013-09-14T11:56:09.520 回答
0

您可以尝试更多的系统独立方法:system("pause");

于 2019-08-20T12:14:10.733 回答