scanf 특징
- 화이트스페이스를 구분하여 작동한다.
scnaf("%d%d",&a, &b);
scanf("%d %d",&a,&b);
둘은 다른거다!!
중간에 화이트스페이스 개수만큼 허용하는 것이다.
- 버퍼
키보드에 입력하는 데이터는 일단 버퍼에 저장된 후 scanf함수에 의해 변수에 입력된다.
#include <stdio.h>
int main(){
char ch;
int i;
for(int i=0;i<3;i++){
scanf("%c",&ch);
printf("%c", ch);
}
return 0;
}
이 예제는 문자를 입력하고 화면에 출력하는 과정을 세번 반복한다.
그러나 실행 결과는 한 번의 키보드 입력으로 끝난다!!!
→최초 scanf 함수가 호출될 때 키보드로 문자열을 입력하면 일단 버퍼에 저장한다. 버퍼에 남아있는것들을 우선적으로 채워넣고, 버퍼에 없을 경우 새로 입력받는다.
따라서!!
입력데이터를 하나 입력하고 엔터를 입력하면 화이트스페이스도 버퍼에 저장이 된다.
#include <stdio.h>
int main(){
char ch;
while(1){
scanf("%c",&ch);
if(ch== '\\n') break;
printf("%c", ch);
}
return 0;
}
이런식으로 입력받은값을 출력하는 코드를 짤수도 있다!
scanf의 반환값
scanf는 -1을 반환하기 전까지 모든 데이터를 사용할 수 있다.
입력버퍼 지우기

따라서 %d로 입력을 여러번 받을 경우에 getchar()를 사용해서 버퍼를 지워줘야 한다.
상황 버퍼 문제 해결 방법
| scanf("%d") 후 scanf("%c") 사용 | 개행(\\n)이 남음 | getchar(); 사용 |
| scanf("%d") 후 fgets() 사용 | 개행(\\n)이 남음 | getchar(); 사용 |
| 연속된 scanf("%c") 사용 | 이전 입력의 개행(\\n)이 다음 입력에 영향을 줌 | getchar(); 사용 |
| scanf() 입력 오류 발생 | 잘못된 입력이 버퍼에 남음 | while (getchar() != '\\n'); 사용 |
'SW > C' 카테고리의 다른 글
| 13-2 함수의 데이터 공유 방법 (0) | 2025.03.30 |
|---|---|
| 12-1 문자열과 포인터 (0) | 2025.03.30 |
| 10-1 배열과 포인터 (0) | 2025.03.30 |
| 9-2 포인터 완전정복 (0) | 2025.03.30 |
| 9-1 포인터 (0) | 2025.03.30 |