C语言中的“按任意键继续”功能

m2xkgtsf  于 2022-12-03  发布在  其他
关注(0)|答案(7)|浏览(449)

我如何创建一个void函数,它在C语言中可以作为“Press Any Key to Continue”使用?
我想做的是:

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进行编译。

xxhby3vn

xxhby3vn1#

使用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()
第一次

vyu0f0g1

vyu0f0g12#

你没有说你使用的是什么系统,但是因为你已经有了一些答案,可能适用于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或调用程序的任何人造成奇怪的影响。

1szpjjfi

1szpjjfi3#

使用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();
}

P.S.正如@Rörd所指出的,如果你使用的是POSIX系统,你需要确保curses库的设置正确。

iswrvxsc

iswrvxsc4#

试试这个:-

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

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

7kqas0il

7kqas0il5#

我认为如果您不使用Linux,可以使用unistd.h

#include <unistd.h>

int main() {
    system("pause");  
    return 0;
}

输出(英语):

Press any key to continue...
7kqas0il

7kqas0il6#

您可以尝试更多与系统无关的方法:

system("pause");
ftf50wuq

ftf50wuq7#

我认为这适用于所有操作系统

#include <stdio.h>

void myflush ( FILE *in )
{
  int ch;

  do
    ch = fgetc ( in ); 
  while ( ch != EOF && ch != '\n' ); 

  clearerr ( in );
}

void mypause ( void ) 
{ 
  printf ( "Press [Enter] to continue . . ." );
  fflush ( stdout );
  getchar();
} 

int main ( void )
{
  int number;

  // Test with an empty stream
  printf ( "Hello, world!\n" );
  mypause();

  // Leave extra input in the stream
  printf ( "Enter more than one character" );

  myflush ( stdin );
  mypause();

  return 0;
}

相关问题