2012-05-30 9 views
1

내가 이해할 수없는 C 언어 INT를받은 후 사용자로부터 문자열을 받고 :이 코드가 제대로 작동되지 않는 이유

#include<stdio.h> 

    int main() 
{ 
    char string [100]; 
    int a; 
    printf(">"); 
    scanf("%d", &a); 
    printf(">"); 
    gets(string); 
    printf("%s\n", string); 
} 

이 내가 구축 한 프로그램에서 작은 부분이며, I 은 scanf() 함수로 값을 가져온 후 프로그램이 gets() 문자열을 올바르게 건너 뛰거나 읽지 않는 이유를 이해할 수 없습니다. 함수. 컴파일러에 코드를 복사하고 실행하려고하면 무슨 뜻인지 이해할 수 있습니다.

답변

3

%d 지정자는 줄 바꿈 (또는 그 문제에 대해 다른 공백)을 사용하지 않습니다. 이 시도 :

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

그 공간이 scanf가 아닌 빈까지 모든 공백을 버려야한다. 덧붙여서, 귀하의 질문은이 C FAQ과 거의 비슷합니다.


  • 는 그것이 더 이상 심지어 언어에없는 그렇게 나쁜, gets를 사용하지 마십시오. 사용 fgets 대신
  • 는 (어떤 scanf와의 후) 공백으로 구성된 문장을 읽을 필요가 때마다, 문제
0

에 대한 fflush(stdin)을 제안하는 사람을 신뢰로는 scanf를 수정하지 마십시오

scanf(" [^\n]", mystring); 
    ^Space here. 

예보기 :

관련 문제