scanf에 대한 질문입니다
174
작성한 질문수 8
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
안녕하세요.
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문이 실행되지 않는 것입니다.
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
47
3
main 함수에서 왜 int만 선언이 되는걸까요
1
53
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
53
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
46
1
프로토타입과 함수간의 인자 불일치
1
72
2
12.12 헤더 관련 질문
1
59
2
Visual Studio Community 2026 사용 문의
1
134
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
59
2
getchar(), putchar()
1
92
3
강의자리ㅛ
1
78
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
112
2
소스파일안에 여러 파일
1
74
2
F5와 F7의 차이
1
75
2
c = TWO * (a+b); 에서 a와 b는?
1
58
2
; 세미콜론을 붙이는 기준에 문의
1
68
1
Step over 기능 문의
1
52
2
2.6 강의 따옴표 출력 규칙 문의
1
74
2
int main 함수 관련 오류 문의
1
67
2
13.4 words[0]
0
60
2
11.7 함수를 구현해 봤습니다.
1
62
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
64
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
53
2
11.6 fit_str함수를 구현해 봤습니다.
1
53
2
11.5 코드 구현
1
67
2





