2016-04-25 37 views
-2

爲了比較strcmp()函數中的兩個字符串,我使用了fgets()cin中的一個輸入字符串,並在函數中給出另一個字符串作爲默認參數。但是,當我通過strcmp()比較它們時,功能輸出不匹配。輸出與c中的strcmp()函數不匹配

char a[20]; 
    int b; 
    cin>>a; 
    b=strcmp(a,"ab"); 
    cout<<b; 

其中i取輸入a作爲abb的值是0,這是完全fine.But當對於相同的輸入取由fgets()然後strcmp()輸出不與以前相同。

char a[20]; 
    int b; 
    fgets(a,sizeof(a),stdin); 
    b=strcmp(a,"ab"); 
    cout<<b; 

其中a的價值是abb的值是1。爲什麼呢?是一個編譯器問題還是別的?

+1

這不是一個編譯器問題。問題在於你沒有更仔細地閱讀文檔。 [fgets函數文檔](http://en.cppreference.com/w/c/io/fgets)。你認爲第二個參數有什麼作用? – PaulMcKenzie

+0

'fgets'和'cin >> a'不會導致相同的字符串。請閱讀_both_的文檔以更好地瞭解他們的工作。 –

+0

@PaulMcKenzie as str將包含該換行符,因此它給出值1.是不是? –

回答

1

fgets()不剝去任何換行,每節7.21.7.2的 fgets 功能the C standard的:

fgets函數讀取比從n指定的 字符數少至多一個將stream 指向的流轉換爲由s指向的數組。在換行符(保留)或文件結束後,不會讀取其他字符 。 在將最後一個字符 讀入數組後立即寫入空字符。