#include <stdio.h>
int main() {
int a, b;
printf("Enter the values of a and b");
scanf(" %d%d ", &a, &b);
printf("a=%d b=%d", a, b);
return 0;
}
왜 큰 따옴표 앞뒤에 공백을 넣으므로 3 개의 입력을 삽입해야합니까?C에서 scanf 기능이 작동하는 방식은 무엇입니까?
#include <stdio.h>
int main() {
int a, b;
printf("Enter the values of a and b");
scanf(" %d%d ", &a, &b);
printf("a=%d b=%d", a, b);
return 0;
}
왜 큰 따옴표 앞뒤에 공백을 넣으므로 3 개의 입력을 삽입해야합니까?C에서 scanf 기능이 작동하는 방식은 무엇입니까?
귀하의 scanf()
형식 " %d%d "
원치 않는 부작용에 여분의 공백이 있습니다
첫 번째는 그것이 선행 공백을 건너 뛸 scanf()
지시, 중복을하지만 일부로서 아직 수행 %d
전환 수 그것을 제거하십시오.
두 번째 정수 뒤에 후행 공백을 건너 뛰도록 scanf()
에 지시합니다. 따라서 공백이 아니거나 스트림의 끝이 아닌 것을 볼 때까지 입력을 계속 읽습니다. 그것을 너무 제거하십시오.
값을 사용하기 전에 scanf()
이 2 개의 정수를 변환했는지 확인해야합니다. 또한, 일부 시스템에서는 출력을 제대로 플러시하지 않으므로 항상 후행 줄 바꿈을 인쇄하십시오.
#include <stdio.h>
int main(void) {
int a, b;
printf("Enter the values of a and b: ");
if (scanf("%d%d", &a, &b) == 2) {
printf("a=%d b=%d\n", a, b);
}
return 0;
}
큰 따옴표 앞뒤에 공백을 넣으면 왜 3 개의 입력을 삽입해야합니까? 당신은 형식 문자열에 공백이있을 때
, 그것은 입력 스트림에서 공백의 수를 건너 뛸 수 있습니다. 따라서 scanf()
은 종료를 위해 공백이 아닌 입력을 기대합니다. scanf 매뉴얼에서
:
공백 문자의 시퀀스 (공백, 탭, 줄 바꿈 등이; isspace와 (3) 참조). 이 지시문은 입력에 아무 것도 포함하지 않은 공백 인 을 일치시킵니다.
따라서 형식 문자열에서 공백을 제거하십시오. 또는 더 나은, avoid scanf() altogether.
@chqrlie, 왜 그는 한 가지 대답을 받아 들일 수 있습니까? 아마 그들 중 누구도 만족하지 못할 것입니다. 그것을 요구하지 마십시오, 그것은 정중하지 않습니다. –
@LuisColorado : OP에는 SO에 대한 경험이 거의 없으므로 대답을 수락하는 방법을 말하고 있습니다. 그의 질문은 두 답변 모두에서 다루어졌으며, 그 중 하나가 받아 들여지는 것이 예상 된 행동입니다. 나는 그것을 중립적으로 만들기 위해 주석을 다시 말해야한다. – chqrlie