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

저스트두잇하는중님의 프로필 이미지

작성한 질문수

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

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

6.1 scanf 반환값

23.01.24 13:38 작성

·

306

0

int main()

{

int num = 0,red=0, sum = 0;

int status;

printf("Enter an integer (q to quit) :");

status= scanf("%d %d", &num, &red);

while (status >= 1)

{

sum = sum + num + red;

printf("Enter next integer (q to quit) : ");

status = scanf("%d %d", &num, &red);

}

printf("Sum = %d", sum);

return 0;

}

여기서 정수를 입력받은 변수의 갯수로 scanf의 반환값이 status라는 변수에 저장되는 것으로 이해했는데요

 

변수 num red에 각각 순서대로 1 2 / 3 4 / q 5를 넣으며 디버거로 확인해봤는데요. 세번째 scanf에 5라는 정수를 입력해서 status 값이 1이 나올거라 생각했는데 왜 status값이 0으로 나올까요? num에 숫자가 아닌 문자를 넣어서 red에도 영향을 주는건가요??

/5 q 순서로 바꿔서 넣어봤을때는 status값이 1이 나와 4번째 scanf를 입력하려 했지만 그냥 그대로 끝이나고 sum도 4가 중복돼서 10과 19로 값이 다르더라고요.

문자를 입력하면 뒤에 변수에도 영향을 주는거 같은데 확실하지 않아서 질문드립니다.

답변 1

0

강민철님의 프로필 이미지

2023. 01. 24. 20:49

while (status >= 1)

{

sum = sum + num + red;

printf("Enter next integer (q to quit) : ");

status = scanf("%d %d", &num, &red);

}

작성하신 코드 중 이 부분을 잘 보시면 될듯합니다.

만일 q 5를 입력하면 q가 입력되었을 때 더 이상 받아들이지 않습니다.

status가 0이 되는 끝나버리는 것이지요.

반면 5 q를 입력하면 5까지는 읽어들여 status는 1이 됩니다.