인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

pknoa12345님의 프로필 이미지

작성한 질문수

홍정모의 따라하며 배우는 C언어

8.4 사용자 인터페이스는 친절하게

8.4 while(getchar() != 'n;) continue; 에서

작성

·

388

0

안녕하세요 교수님 다른 분이 하신 해당강의 질문에서 while(getchar() != 'n') continue; 에서 getchar() 부분을 c로 바꾸면 오류가 생기는 이유를 알았습니다. 

근데  while (getchar() != '\n') continue; 에서

getchar() 부분을 (c = getchar()) 로 바꿔주게 되면 정상적으로 작동하는데 입력을 예를 들어 yes 로 입력해주게 된다면 c 도 영원히 y의 아스키코드코드 값인 121이 저장되서  (c = getchar()) != '\n' 이 항상 참이되서 영원히 while 문을 돌아야 하는게 아닌가해서 질문 올려봅니다..

답변 1

1

강민철님의 프로필 이미지

아래 코드 말씀이시지요?

어떤 값을 입력하든 입력 이후에는 엔터를 누르기 때문에

개행은 언제나 입력이 됩니다.

그렇기에 무한 루프를 돌지는 않습니다.

실제로 아래 코드를 실행하여 yes를 입력하여도 무한루프는 돌지 않음을 알 수 있습니다.

 

(다만 말씀하신대로 yes를 입력하는 것은 옳지 못한 입력입니다.

다만 무한루프가 생성되지 않는다는 것만을 설명드렸습니다)

 

 

#include <stdio.h>

int main(){

    int count = 0;
    while (1)
    {
        printf("current count is %d. Continue (y/n)\n", count);
        int c = getchar();

        if (c=='n')
	    break;
	else if (c == 'y')
	    count++;
	else
	    printf("please input y or n\n");

	while (getchar() != '\n')
	    continue;
     }
    return 0;
}