inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

C 프로그램 지원

150

limaroma

작성한 질문수 1

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

oort_cloud98

안녕하세요 어느 IDE(개발 프로그램)를 사용 하시는지는 모르겠지만 제 기준으로 말씀 드릴게요.

저는 visual studio2019 를 사용 중이고요 scanf는 지원을 안해서 변경했는데 에러는 해결 할 수 있을 것입니답.image해당 캡처본을 보면 command에 개행 문자가 들어가 있어요. (앞에 숫자 10은 아스키코드이닌 신경 안써도 됩니다.)

디버그해서 해당 변수의 값을 열어본 것인데요. (디버그 방식은 검색해보시는 것이 빠를것 같습니답)

scanf관련해서 검색을 해보니 다양하게 나오네요.

%c 형식 지정자는 '버퍼' 라는 곳에서 문자를 가져와 읽는 지정자입니다.

버퍼는 간단히 말하면 창고 같은 곳이죠.

앞에서 숫자를 입력받을때 숫자만 저장되는 것이 아닌 개행문자도 같이 저장되는데

숫자는 사용을 해버려서 버퍼에서 삭제됩니다. 하지만 개행문자가 남았죠

버퍼가 비어있지 않고 문자를 가지고 있기 때문에 %c 지정자가 개행문자를 읽고 출력해버리는 것 같습니다.

흔히 있는 오류라고 하네요.

해결 방법은 다양하게 있지만

" %c"

%c 형식 지정자 앞에 공백을 하나 주는 것이 간단해 보이네요.

강의 수강 후 포트폴리오 준비 방향에 대해 조언 부탁드립니다.

2

41

1

강의 자료를 어디서 확인 할 수 있나요?

1

44

3

강의가 넘 좋아서 3번째 복습을 하고 있는데

1

36

3

실습 중 codex를 클로드코드로 대체 가능한지 문의

1

32

2