2014-06-07 4 views
2

사용자의 두 문자를 t 번 입력하려고합니다. C에서 scanf()를 사용하여 두 개의 문자를 연속적으로 읽으십시오

int main() 
{ 
    int t; 
    scanf("%d",&t); 
    char a,b; 

    for(i=0; i<t; i++) 
    { 
     printf("enter a: "); 
     scanf("%c",&a); 

     printf("enter b:"); 
     scanf("%c",&b); 
    } 
    return 0; 
} 

이 이상하게 출력은 아주 처음은 다음과 같습니다 :

입니다
enter a: 
enter b: 

, 코드가 a의 값을 기다리지 않습니다 여기 내 코드입니다.

답변

7

scanf("%d", &t)scanf("%c", &a)에 의해서만 소비되는 입력 버퍼에 줄 바꿈을 남겨 둡니다 (따라서 a에 줄 바꿈 문자가 할당 됨). 개행을 getchar();과 함께 사용해야합니다.

다른 방법은 공백 문자 (이 줄 바꿈 포함)를 무시하기 위해 scanf() 형식 지정자에 공백을 추가하는 것입니다. 그것의 임의의 수를 무시하기 때문에,

for(i=0; i<t; i++) 
{ 
    getchar(); 
    printf("enter a: "); 
    scanf("%c",&a); 

    getchar(); 
    printf("enter b:"); 
    scanf("%c",&b); 
} 

내가 개인적으로 우수한 전자의 접근 방법을 고려 : 예 :

for(i=0; i<t; i++) 
{ 
    printf("enter a: "); 
    scanf(" %c",&a); 

    printf("enter b: "); 
    scanf(" %c",&b); 
} 

당신이 줄 바꿈을 소비 getchar()을 사용하여 선호하는 경우, 당신은 이런 식으로 뭔가를해야 할 것 반면에 getchar()은 공백을 하나만 사용합니다.

+1

로 읽기 전에 줄 바꿈 '\n'을 읽을 필요가 ... 또는 당신은 --->'scanf와 scanf''에서 %의 c' '앞에 공백을 배치 할 수 있습니다 ("%의 C", & A)'. – haccks

+1

@haccks 그래, 사실이 대답을 내 답변에 추가 할 것이다. 팁을 주셔서 감사합니다.) –

+0

그냥 루프가 작동하지 않는 대신 getchar을 추가하는 것입니다. 그러나 루프의 시작 부분과 루프의 마지막 부분에 getchar를 추가하는 방법 이 경우에는 작동합니다. –

0

코드를 보면 완벽한 A와 B를 읽어야하지만 각 루프마다 A와 B를 대신합니다.

를 사용하여 배열 또는 해시 테이블이 scanf 사용을 효과적으로

+0

질문은 a와 b를 처리하는 것이 아니라 입력에 관한 것입니다. 그래서 당신은 다른 질문이 아니라이 질문에 답합니다. – Rob11311

+0

미안하지만 도움이되는 희망 질문을받지 못했습니다. –

0

일부 형식을 저장할 수는 줄 바꿈이 stdin에서 손질한다 그러나 다른 사람은하지 않습니다. "%d"을 사용한 읽기는 후자의 범주에 속합니다. 당신은

scanf("%c", &a);