반응형
scanf(), fgets(,,) 함수로 여러 문자열을 입력받다보면,
중간에 엔터키(\n)가 입력버퍼에 남아 입력하지도 않고도 입력이 되는 상황이 나타난다
(다음 함수 호출 시에 버퍼에 남아있는 '\n'가 입력됨)
fgets(char * s, int n, FILE * stream) 함수같은 경우에는,
n값 안에 '\0'값도 포함되어 실제적으로 n-1개의 문자를 입력받을 수 있는데,
이를 넘어서 입력하게 되면 엔터키(\n)가 저절로 입력버퍼에 남게 된다
이를 해결하기 위해서는,
입력함수 후에
void ClearLineFromReadBuffer(void)
{
while(getchar() != '\n');
}
ClearLineFromReadBuffer() 함수를 호출하는 것 !
물론 이 이외에도
1. 간단하게는 getchar(); 를 추가
2. fflush(stdin); 추가
그런데 이건 gcc에서 안돌아감
3. rewind(stdio); 추가
rewind함수는 매개변수로 들어온 스트림을 초기화하는데 사용
4. fgets(string, sizeof(string), stdin);
다음 줄에
string[strlen(string)-1] = '\0'; 로 강제로 널문자를 넣어줌
5. scanf("%*c", c);
%*c는 입력은 받지만 저장은 안 함, 즉 비어있는 \n를 날림
6. scanf("%c", &c);를 scanf(" %c", &c); 로
%c 앞에 공백을 추가하면 white space를 구분자로 인식
등 방법은 많음
반응형
'etc.' 카테고리의 다른 글
[티스토리] 코드블럭 글꼴, 스타일 설정 / 라인넘버 표처럼 안 나오게 설정 (6) | 2020.02.03 |
---|---|
JAVA 연습장 실행하기 (0) | 2020.01.07 |
[C code] Boolean 자료형 (0) | 2020.01.04 |
[C code] EOF 활용하기 (문자, 정수, ...) (0) | 2020.01.04 |
[C] 지역변수와 전역변수 (메모리 영역 - code, data, heap, stack) (0) | 2020.01.04 |