2016-12-02 4 views
0

저는 C 프로그래밍의 초보자이고 지금 scanf을 배우고 있습니다.scanf()를 사용하여 코드를 설명하는 방법은 무엇입니까?

일부 코드를 작성했으며이를 이해하려고합니다.

#include <studio.h> 
int main(){ 
    int a=1, b=2, c=3; 
    scanf ("%d%d", &a,&b); 
    scanf ("%d", &c); 
    scanf ("%d", &c); 
    printf ("a=%d\nb=%d\nc=%d\n", a, b, c); 
    return 0; 
} 

When I input 
11 22 33 44 
The output is 
a=11 
b=22 
c=44 

이 정상입니다 : 여기

는 코드입니다. 그러나 입력 할 때 :

11, 22, 33, 44 
Output 
a=11 
b=2 
c=3 

쉼표가 입력 프로세스를 중지하는 것처럼 보입니다.

왜 이런 일이 일어 났는지 설명 할 수 있습니까? %d%d 사이에 쉼표를 넣어 때

사실, (그것은 "%d, %d" 같다), 및 입력 데이터 입력이 쉼표로 구분해야합니다. 제공

scanf 매개 변수 나에게 쉼표를위한 몇 가지 제안을 줄 수

?

+1

'scanf'는 당신이 지정한 입력을 해석하려고 시도합니다. 그것은 첫 번째'% d '에 대해서는 정상적으로 작동합니다. 이것은 분명히 11입니다. 그러면','을 읽고이를 정수로 변환하려고합니다. 이는 작동하지 않습니다. 따라서 실패하고 값은 이전과 동일합니다 ('b = 2'). 다음 'scanf'는 동일하게 시도하고 다시 실패하므로 'c = 3'을 갖습니다. 값을','로 구분하지 마십시오. 그러면 괜찮을 것입니다. – SgtDroelf

+1

'scanf()'의 동작 방식을 추측하기보다는 사용중인 텍스트에서 문서 나 설명을 읽는 것이 어떻습니까? 아니면 강사에게 물어 보시겠습니까? 우리는 귀하가 여기에서 도움을 요청하기 전에 스스로 해결책을 찾기 위해 합당한 노력을 기울일 것을 기대합니다. –

+0

답장을 보내 주셔서 감사합니다. 나 혼자서 C를 배울 때 어떤 강사도 나를 도울 수 없다. – user7241487

답변

1

형식 문자열과 일치하지 않는 stdin의 문자를 찾을 때 scanf가 읽기를 중지합니다.

예에서 scanf는 정수 값을 구성하는 문자 만 필요합니다. 사실, 첫 번째 쉼표가 첫 번째 쉼표에 도달하면 첫 번째 scanf가 중지됩니다. 다른 scanfs가 stdin에서 읽으려고 할 때, 그들이 찾을 수있는 첫 번째 문자는 scanf가 읽지 만 사용하지 않은 마지막 문자 인 쉼표입니다. 이것은 그들이 아무 것도 읽지 않고 곧 끝날 이유입니다.

입력 할 때 쉼표 나 다른 문자를 기억하려는 값 이상으로 사용하려면 형식 문자열에 해당 문자를 삽입해야합니다.

scanf("%d, %d", &a, &b); 

당신은 정수를 읽어 변수에 저장하려면, 쉼표를 읽고 그것을 잊지 후, 다른 정수를 읽고에 저장하기 위해 scanf와 지시하는이 한 Statment와 예를 들어

변수 b. 파싱하는 동안 scanf가 정수 또는 쉼표가 아닌 것을 발견하면 다른 값을 읽지 않고 즉시 중지합니다 (b 및 c가 프로그램에서 이전 값을 갖는 이유입니다).

0
이 같은 scanf에 쉼표를 사용할 수 있습니다

:.. scanf ("%d,%d,%d", &a,&b,&c); 다음 쉼표로 구분 한 줄에 입력 번호 11,12,13 참고이 시나리오에서,465,쉼표로 구분 된 숫자의 단일 행 입력이 필요합니다. 이 경우 입력 내용이 11 12 13이면 원하는 결과를 얻습니다.

0

답장 보내 주셔서 감사합니다.

#include <stdio.h> 
int main(){ 
    int a=1, b=2, c=3; 
    scanf ("%d, %d", &a,&b); 
    scanf ("%d", &c); 
    scanf ("%d", &c); 
    printf ("a=%d\nb=%d\nc=%d\n", a, b, c); 
    return 0; 
} 

때 입력

11 22 33 44 

출력 : 나는 다른 코드를 시도

a=11 
b=2 
c=33 

방법을 설명하기 위해?두 번째 질문에 대한

+0

이 답변은 게시물의 이슈에 답하지 않지만 또 다른 질문입니다. 제거를 권장합니다. – chux

0

먼저 scanf은 쉼표로 구분 정수를 기대 (:(여기에 인용하는 방법을 모른다). 당신이 scanfa에 첫 번째 숫자 11를 가져다가 할당 된 것을처럼 입력을 입력하지 않은 것처럼 (b는 무시됩니다). 둘째 scanf 입력에 수 22와 세 번째 scanf33. 수 44했다가 중복됩니다. 그게 전부가 왜 출력이 그런 것 같습니다. b=2 코드의 이전 부분에서입니다 하는 것으로 int b=2

관련 문제