2016-10-30 3 views
2
#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 기능이 작동하는 방식은 무엇입니까?

+0

@chqrlie, 왜 그는 한 가지 대답을 받아 들일 수 있습니까? 아마 그들 중 누구도 만족하지 못할 것입니다. 그것을 요구하지 마십시오, 그것은 정중하지 않습니다. –

+0

@LuisColorado : OP에는 SO에 대한 경험이 거의 없으므로 대답을 수락하는 방법을 말하고 있습니다. 그의 질문은 두 답변 모두에서 다루어졌으며, 그 중 하나가 받아 들여지는 것이 예상 된 행동입니다. 나는 그것을 중립적으로 만들기 위해 주석을 다시 말해야한다. – chqrlie

답변

1

귀하의 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; 
} 
0

큰 따옴표 앞뒤에 공백을 넣으면 왜 3 개의 입력을 삽입해야합니까? 당신은 형식 문자열에 공백이있을 때

, 그것은 입력 스트림에서 공백의 수를 건너 뛸 수 있습니다. 따라서 scanf()은 종료를 위해 공백이 아닌 입력을 기대합니다. scanf 매뉴얼에서

:

공백 문자의 시퀀스 (공백, 탭, 줄 바꿈 등이; isspace와 (3) 참조). 이 지시문은 입력에 아무 것도 포함하지 않은 공백 인 을 일치시킵니다.

따라서 형식 문자열에서 공백을 제거하십시오. 또는 더 나은, avoid scanf() altogether.

관련 문제