반복문안에 getchar가 이상합니다. 왜 그런지 가르쳐 주세요~~
글쓴이: ins878 / 작성시간: 수, 2005/05/04 - 9:31오전
프로그램을 짜다가 도저히 이해가 안됩니다. 물론 다른 자료를 찾아봤는데도, 이것에 관한 내용은 없는 것 같아서 글을 올립니다. (이것에 삽질 5시간~~바보인가 봐요~~ T.T )
#include <stdio.h> int main() { char c; printf("Test\n"); do { printf("get : "); c = getchar(); }while(c != 'y'); return 0; }
위 소스코드를 실행하면 아래와 같이 나옵니다
test get : a(입력) get : get : b(입력) get : get :
이상한 것이 Enter를 치면 get :이라는 문자출력이 1번만 되는데, 다른 문자(예, a, b)를 입력하면 get: get: 이라고 화면에 출력이 됩니다.
gdb로 확인해 보니깐 y가 아닌 다른 문자를 입력을 하면 while문 2번 실행(getchar 1번 무시)이 됩니다.
왜 이런 결과가 나오는지~??? 혹시 stream 때문인가요?
아~ 자료를 찾아봐도 왜 이런 결과가 나오는지 해답을 모르겠습니다.
왜 이런 결과가 나오는지 고수님들 가르쳐 주세요~ 이 문제를 해결하기 위한 다른 방안이라도~ 부탁드립니다.
Forums:
Re: 반복문안에 getchar가 이상합니다. 왜 그런지 가르쳐 주세요
a <- Enter를 입력하면 a와 newline 두 문자가 입력되는 것이 아닌가요? 당연히 모두 y가 아니가 때문에 두번루프를 돌것이고....
y를 입력하면 뒤의 newline문자를 체크하기전에 루프가 끝날것이고...
제가 C를 안한지 오래되었기 때문에.....
한번 체크해보세요.
Re: 반복문안에 getchar가 이상합니다. 왜 그런지 가르쳐 주세요
여기에서 getchar로 검색해보기 바랍니다.
여기에서 getchar로 검색해보기 바랍니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
getchar문을 한 번 더 쓰세요.
루프가 끝나기 전에 getchar 문을 한 번 더 써주세요. 물론 변수 대입 안하셔도 되고요. 그냥 getchar(); 한 줄만 추가해 주시면 되요. 만약 빈칸 입력을 (값이 입력 안되고 엔터만 입력될 경우라던가, 빈칸 입력이 되는 경우) 받을 수 있도록 소스코드를 작성하시겠다면 do~while 문 보다는 while 문을 사용하셔서 조건식에 getchar 문을 삽입하세요. 그 다음 안에서 if 문을 이용하셔서 break 를 넣으셔도 됩니다.
[code:1]c = getchar();[/code:1]
c = getchar();
대신에scanf (" %c", &c);
로 해보세요. (%c 앞에 빈칸이 포인트)댓글 달기