다음 프로그램이 있습니다.
int main(int argc, char *argv[])
{
char ch1, ch2;
printf("Input the first character:"); // Line 1
scanf("%c", &ch1);
printf("Input the second character:"); // Line 2
ch2 = getchar();
printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
printf("ch2=%c, ASCII code = %d\n", ch2, ch2);
system("PAUSE");
return 0;
}
위 코드의 작성자가 설명했듯이 프로그램이 제대로 작동하지 않습니다. 첫 번째 줄에서 사용자가 Enter 키를 누르면 입력 버퍼 2 문자 Enter key (ASCII code 13)및 \n (ASCII code 10). 따라서 2 행에서를 읽고 \n사용자가 문자를 입력 할 때까지 기다리지 않습니다.
알겠습니다. 하지만 내 첫 번째 질문은 : 두 번째 이유는 getchar()( ch2 = getchar();) 읽기하지 않는 Enter key (13)것이 아니라, \n캐릭터?
다음으로 저자는 이러한 문제를 해결하는 두 가지 방법을 제안했습니다.
사용하다
fflush()다음과 같은 함수를 작성하십시오.
void clear (void) { while ( getchar() != '\n' ); }
이 코드는 실제로 작동했습니다. 하지만 어떻게 작동하는지 스스로 설명 할 수 없습니까? while 문에서를 사용하므로 ?를 getchar() != '\n'제외한 모든 단일 문자를 읽습니다 '\n'. 그렇다면 입력 버퍼에 여전히 '\n'문자 가 남아 있습니까?