• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

scanf에 대한 질문입니다

21.02.16 20:54 작성 조회수 105

0

while(scanf("%ld",&input) != 1) 이 부분에서 !=1이 아니라 !=0이라고 입력하면 원하는대로 프로그램이 작동하지 않는 이유가 궁금합니다. 1 대신 다른 숫자를 입력하면 제대로 작동하는데 !=0을 쓰면 제대로 작동하지 않습니다.

while(scanf("%ld",&input) != 0)로 입력했을 때의 결과입니다. 

Please input an integer and press enter.

hello

Your input is -858993460. Thank you.

답변 1

답변을 작성해보세요.

0

안소님의 프로필

안소

2021.02.18

안녕하세요. 

scanf 가 입력에 성공한 변수의 개수를 리턴한다는 것과 강의에서 저런 while문을 왜 만들었는지를 생각해보세요!

while(scanf("%ld",&input) != 1) 로 써준다면 while문이 실행된다면 input에 성공적으로 입력이 잘되어서 scanf가 1을 리턴한다면 (input 1개에 잘 입력했으니 입력 성공시 1 리턴) 이 while문을 안돈다는 얘기가 되겠죠. 반면에 input에 입력을 실패해서 scanf가 1이 아닌 0을 리턴하면 while문을 실행하겠구요. 강의에서 while문을 만든 이유는 input 에 입력이 실패했을시 (숫자가 아닌 문자 같은 것을 입력한 경우가 되겠죠) 정수가 아니니 다시 입력할 것을 권하며 다시 입력 받도록 하기 위함임을 알 수 있습니다. 그래서 반복조건을 이렇게 해주신것이죠.

반면에 while(scanf("%ld",&input) != 0) 로 써주신다면 위와 완전히 반대가 되는거에요. 이건 scanf의 결과가 0이 아닐때만 while문을 실행한다는 것입니다. 즉, scanf 결과가 0 이면 while문을 실행하지 않는다는 것이죠. hello 라고 문자열을 입력하셨으니 이건 input에 입력될 수가 없어 scanf가 0을 리턴하므로 다시 입력할 것을 권하며 다시 입력 받도록 해주는 while문이 실행되지 못합니다. 그래서 input에는 입력된 것이 없어 쓰레기값 -858993460 가 출력되고 while문이 실행되지 않는 것입니다.