반응형
#include<stdio.h>
int main()
{
int input_char=0;
while(1)
{
printf("Input character:");
input_char = getchar();
if((input_char == 'y') || (input_char == 'Y'))
puts("OK, 'y' input");
else
puts("NO");
}
return 0;
}
위의 프로그램에서 y,Y를 입력받으면 OK, 'y' input를 출력하고 나머지 문자에 대해서는 NO를 출력하는 프로그램이다.
하지만 문제점이 뭘까? 바로 y라고 입력하고 enter키 때문에 '\n'으로 받아지면서 NO가 한번 출력 된다.
초보자들이 의도한 바와는 전혀 다른 결과가 출력된다. getchar() 는 문자하나만 받아들이는 것이 아니라 개행 문자까지 받아 온다.
그래서 입력버퍼에 개행이 남게 되서 결국 두개의 문자를 받아들이게 되는 셈이다.
보통은 아래와 같이 해결한다.
#include<stdio.h>
#include<string.h>
int main()
{
int input_char = 0;
while(1)
{
printf("Input character : ");
input_char = getchar();
if(input_char =='\n')
continue;
else
getchar();
if((input_char == 'y') || (input_char == 'Y'))
puts("OK,'y' input");
else
puts("NO");
}
return 0;
}
<고급 활용>
참고 : EOF가 아니면 계속 문자를 받는 프로그램일 경우
char ch;
ch = getchar();
위와 같이 정의할 경우 EOF의 값을 사용자가 본의 아니게 입력할 수가 있다.
즉, 프로그램을 종료하고 싶지 않은데 종료가 되는 경우가 있다.
확실하게 해결하기 위해서는 아래와 같이 수정하면 된다.
int ch;
ch = getchar();
이렇게 수정하면 문자는 1바이트를 벗어나지 못하기 때문에
4바이트의 ch를 EOF(-1)로 채울 수 없다.
즉, 사용자가 EOF를 입력해야만 인식하고 프로그램이 종료된다.
반응형
'프로그래머의 길 > C & C++' 카테고리의 다른 글
2차원 배열 매개변수로 받는 방법 (0) | 2007.03.09 |
---|---|
extern, static 이란? (0) | 2007.03.09 |
고수준 파일 입출력 함수 정리 (0) | 2007.03.07 |
문자열 조작 함수 (0) | 2007.03.06 |
rand() ,srand() 역활 (C에서 random 함수 사용) (0) | 2007.02.27 |