programing

C에서 "계속하려면 아무 키나 누르기" 기능

telecom 2023. 7. 19. 21:10
반응형

C에서 "계속하려면 아무 키나 누르기" 기능

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로 컴파일하고 있습니다.

C 표준 라이브러리 기능 사용getchar()대신에getch()는 MS-DOS/Windows 전용으로 Borland TURBO C에서 제공하는 표준 기능이 아닙니다.

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.      

어떤 시스템을 사용하고 있는지는 말하지 않지만 이미 Windows에서 작동하거나 작동하지 않을 수 있는 몇 가지 답변이 있으므로 POSIX 시스템에 대해 답변하겠습니다.

POSIX에서 키보드 입력은 터미널 인터페이스라고 불리는 것을 통해 이루어지며 기본적으로 백스페이스를 적절하게 처리하기 위해 Return/Enter를 누를 때까지 입력 라인을 버퍼링합니다.tcsettract 호출을 사용하여 이를 변경할 수 있습니다.

#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(with)에서 읽을 때.getchar()또는 다른 방법으로), 반환/입력을 기다리지 않고 문자를 즉시 반환합니다.또한 백스페이스는 더 이상 '작동'하지 않습니다. 마지막 문자를 지우는 대신 입력에서 실제 백스페이스 문자를 읽게 됩니다.

또한 프로그램이 종료되기 전에 표준 모드를 복원해야 합니다. 그렇지 않으면 표준 모드가 아닌 처리로 인해 셸 또는 프로그램을 실행한 사용자에게 이상한 영향이 발생할 수 있습니다.

사용하다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();
}

추신: @Rörd는 만약 당신이 POSIX 시스템에 있다면, 당신은 저주 라이브러리가 올바르게 설정되어 있는지 확인해야 한다고 지적했습니다.

사용해 보십시오.

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

getch()콘솔에서 문자를 가져오는 데 사용되지만 화면에 반향되지 않습니다.

리눅스를 사용하지 않는다면 당신은 사용할 수 있습니다.unistd.h

#include <unistd.h>

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

출력(영어):

Press any key to continue...

다음과 같은 시스템 독립적인 방법을 사용해 볼 수 있습니다.

system("pause");

이것은 모든 OS에서 작동한다고 생각합니다.

#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;
}

언급URL : https://stackoverflow.com/questions/18801483/press-any-key-to-continue-function-in-c

반응형