2012-05-30 46 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); 
} 

這是一小部分從一個程序,我必須建立和我不能 理解爲什麼在通過scanf()函數獲取值後, 程序跳過或不正確讀取字符串gets() 函數。如果您將代碼複製到編譯器中並嘗試運行,您將明白我的意思。

回答

3

%d說明符不會吃換行符(或其他空白)。試試這個:

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

這些空間讓scanf扔掉所有的空白,直到非空。順便提一句,你的問題與C FAQ相似。


  • 不要使用gets,它是如此糟糕,這甚至不是在語言了。 使用fgets代替
  • 不要爲你的問題
0

相信任何人暗示fflush(stdin)每當你需要閱讀與空間構成的句子(之後的任何scanf函數的),修改scanf函數來:

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

看你的例子:

#include<stdio.h> 

int main(void) 
{ 
    char mystring[100]; 
    int a; 

    printf(">"); 
    scanf("%d", &a); 

    printf(">"); 
    scanf(" %[^\n]", mystring); 

    printf("Number:%d\nString: %s\n", a, mystring); 

    return 0; 
}