강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

Key님의 프로필 이미지
Key

작성한 질문수

홍정모의 따라하며 배우는 C언어

6.1 while 반복 루프에서 scanf()의 반환값 사용하기

왜 q를 입력하면 무한 반복이 되는건가요~?

작성

·

396

2

안녕하세요! 

제가 만든 수식이 "Input number : " 가 무한으로 출력되는 이유를 알고 싶어서 질문남깁니다!

 

나름 지금까지 열심히 강의를 듣고, 그것들을 토대로 만들었는데 정답은 아니었나봅니다..! 

그치만 여기서 안되는 이유가 궁금해서 질문 남깁니다!

잘부탁드립니다!

 

 

퀴즈

scanf() 함수의 반환값은 주로 무엇을 의미할까요?

읽어들인 문자 수

오류 코드

성공적으로 읽어들인 변수 수

입력된 값의 합계

답변 2

2

안녕하세요 

%d는 문자인 'q'를 받지 못합니다. 

(문자를 받으려고 한다면 %c 를 사용해야 합니다.) 

 

int check = scanf("%d", &number); 

printf("check : %d \n" , check) ; 

로 코드를 작성한 후 input  값으로 숫자가 아닌 알파벳 문자를 넣어보신다면

결과값이 1이 아닌 0 임을 확인하실 수 있습니다. 

(scanf 함수가 반환하는 리턴 값은 정상적으로 읽어들인 변수의 갯수입니다.)

답변 감사합니다 :)

Key님의 프로필 이미지
Key
질문자

정말 도움이 되었습니다.  나르비님이 공유해주신 int check 코딩방법도 알게 되었네요! 
공유해주신 코드를 이용해서 한 가지 실험을 해봤는데,

짝수인지 홀수 인지 파악하는 계산하는 강의 중에 제가 처음에 잘못 작성한 코드가 있습니다. 

while (scanf("%d", &number) % 2 == 0)

{

printf("Even");

}

printf("Odd");

아래에 

int check = (scanf("%d", &number) % 2 == 0);

printf("check : %d \n", check);

를 입력하면 입력하는 숫자가 모두 0이 나오는데 이것은 scanf로 숫자를 받고 나머지 2를 계산한게 0이라는 뜻이기 때문인걸까요~?

바쁘실텐데 잘부탁드리겠습니다!

scanf는 성공적으로 입력받은 개수를 리턴합니다.

(입력받은 숫자를 리턴하지 않지요.)

 

그래서 scanf("%d", &number) % 2 의 결과는 항상 0입니다.

 

 

 

Key님의 프로필 이미지
Key
질문자

아 그렇군요!
제가 그러면 제대로 이해한게 맞을까요?

scanf("%d", &number) 에 7을 입력하면,
number의 주소에 해당하는 메모리에 7을 덮어써주고 1을 리턴하는 건가요~?

맞습니다 :)

1

Key님의 프로필 이미지
Key
질문자

감사합니다!!

Key님의 프로필 이미지
Key

작성한 질문수

질문하기