몽셀통통의 블로그

scanf 사용시 나타나는 버퍼 문제 getchar() 사용 본문

IT/함수

scanf 사용시 나타나는 버퍼 문제 getchar() 사용

몽통이 2018. 5. 27. 17:15






scanf 사용시 원치않은 값이 들어가 있다면 버퍼 문제를 살펴 보아야한다.


int main() {

cin >> R >> C;


for (int i = 0; i < R; i++) {

for (int j = 0; j < C; j++) {

scnaf("%c" ,&arr[i][j]);

}

}


for (int i = 0; i < R; i++) {

for (int j = 0; j < C; j++) {

cout << arr[i][j];

}

puts("");

}

}


이라고 했을때 정상적인 값이 나올것 같지만



중간중간에 10이라는 값이 섞여 들어가는 것을 확인할 수 있다.

이 값은 엔터값이 들어가면서 아스키 코드 값인 10이 들어가게 되는데 그 값이 된다.



 

for (int i = 0; i < R; i++) {

                getchar();

for (int j = 0; j < C; j++) {

scnaf("%c" ,&arr[i][j]);

}

}


중간에 getchar(); 함수를 넣게되면 엔터값을 받아서 사라지게 할 수 있다.

그 결과 다음과 같은 출력값을 얻을 수 있다.



cin과 cout을 사용하면 getchar 없이도 정상적인 결과값을 출력할 수 있다.


 

int main() {

cin >> R >> C;


for (int i = 0; i < R; i++) {

for (int j = 0; j < C; j++) {

cin >> arr[i][j];

}

}


for (int i = 0; i < R; i++) {

for (int j = 0; j < C; j++) {

cout << arr[i][j];

}

puts("");

}

}



cin과 cout을 사용한 출력값