반응형
아래와 같은 코드를 실행시켜 보면
#include <stdio.h>
int main(void)
{
char str[30] = {0};
char ch = 0;
scanf("%s", str);
scanf("%c", &ch);
printf("%s\n", str);
printf("%c\n", ch);
return 0;
}
사용자가 "abc"를 입력했을 경우 "abc"를 str에 입력받고나서
ch에 입력받을 문자를 사용자가 입력 하기를 기다려야 되는데 그냥 넘어가 버린다.
이유는 사용자가 "abc"를 입력할 때 입력되는 문자열은 정확하게는 "abc(enter)"이다.
이 때문에 str에 "abc"가 입력이되고 입력버퍼에는 "(enter)"가 남아있게 된다. (엔터가...)
그래서 ch에 하나의 문자를 입력받을 차례에 이 "(enter)"가 입력이 되어버리고 출력 결과에 보면 줄바뀜이 되는걸 확인할 수 있다.
이를 해결하기 위해서는
1. scanf(" %c", &ch); 와 같이 %c 앞에 공백을 넣어준다.
2. getchar();를 scanf 사용전에 써서 getchar 함수가 엔터값을 입력 받도록 하면 된다. (아래로 전부 scanf 사용 전에 코드를 추가)
scanf("%s", str);
getchar();
scanf("%c", &ch);
3. fflush(stdin); 을 추가해서 입력 버퍼를 비워줘도 된다. 하지만 gcc에선 안 된다.
scanf("%s", str);
fflush(stdin);
scanf("%c", &ch);
4. rewind(stdio); 를 추가. 정확한 원리는 모르겠다. gcc에서도 되는지도 모르겠다.
scanf("%s", str);
rewind(stdio);
scanf("%c", &ch);
반응형
'C > Study' 카테고리의 다른 글
[C] NULL과 널문자 (0) | 2024.12.15 |
---|---|
[C] 메모리 공간의 할당과 초기화가 동시에 일어나는 상황 (0) | 2024.12.15 |
[C] C언어의 메모리 구조 (스택, 힙, 데이터, 코드 영역) (0) | 2024.12.15 |
[C] 뇌를 자극하는 윈도우즈 시스템 프로그래밍 명령 프롬프트 프로젝트 코드 (0) | 2024.12.15 |
[C] printf 함수의 매개변수 문자열 포맷 형식 (0) | 2024.12.15 |