인프런 커뮤니티 질문&답변
C 프로그램 지원
작성
·
146
0
C 언어를 배우고 있는데 아래의 코드가 이상하게 잘 안움직이네요
숫자를 입력하고 다시한번 하려고 scanf 입력을 받아 do while문을
썼는데 제생각대로 안되고 바로 프로그램이 정지를 하네요
고수님들의 가르침을 기다립니다.
#include <stdio.h>
#include <stdio.h>
int getNumbers(void);
int main (void){
printf("Hello World!\n");
char command = '\0';
int t = 0;
do {
t = getNumbers();
printf("Your entered number is %d.\n", t);
printf("One more time: ");
scanf("%c", &command);
printf("\n");
} while (command == 'Y' || command == 'y');
return 0;
}
int getNumbers(void) {
int temp = 0;
printf("임의의 수를 입력 하세요: ");
scanf("%d", &temp);
printf("입력한 수는 %d 입니다.\n", temp);
return temp;
}
답변 1
0
안녕하세요 어느 IDE(개발 프로그램)를 사용 하시는지는 모르겠지만 제 기준으로 말씀 드릴게요.
저는 visual studio2019 를 사용 중이고요 scanf는 지원을 안해서 변경했는데 에러는 해결 할 수 있을 것입니답.
해당 캡처본을 보면 command에 개행 문자가 들어가 있어요. (앞에 숫자 10은 아스키코드이닌 신경 안써도 됩니다.)
디버그해서 해당 변수의 값을 열어본 것인데요. (디버그 방식은 검색해보시는 것이 빠를것 같습니답)
scanf관련해서 검색을 해보니 다양하게 나오네요.
%c 형식 지정자는 '버퍼' 라는 곳에서 문자를 가져와 읽는 지정자입니다.
버퍼는 간단히 말하면 창고 같은 곳이죠.
앞에서 숫자를 입력받을때 숫자만 저장되는 것이 아닌 개행문자도 같이 저장되는데
숫자는 사용을 해버려서 버퍼에서 삭제됩니다. 하지만 개행문자가 남았죠
버퍼가 비어있지 않고 문자를 가지고 있기 때문에 %c 지정자가 개행문자를 읽고 출력해버리는 것 같습니다.
흔히 있는 오류라고 하네요.
해결 방법은 다양하게 있지만
" %c"
%c 형식 지정자 앞에 공백을 하나 주는 것이 간단해 보이네요.




