2016-04-25 21 views
-2

strcmp()関数で2つの文字列を比較するには、入力文字列をfgets()cinで行い、別の関数をデフォルト引数として与えました。しかし、私がstrcmp() funtionの出力でそれらを比較すると一致しません。 iはabとして入力abの値をとる出力がcのstrcmp()関数と一致しません

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

は同じ入力に対してfgets()によって取られたとき完全にfine.But次いでstrcmp()出力は以前と同じではありませんどの0です。 aの値がabで、bの値が1であるのはなぜ

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

?それはコンパイラの問題なのでしょうか?

+1

コンパイラの問題ではありません。問題は、あなたがドキュメントをもっと詳しく読まなかったことです。 [fgets関数ドキュメント](http://en.cppreference.com/w/c/io/fgets) 2番目のパラメータは何をしていると思いますか? – PaulMcKenzie

+0

'fgets'と' cin >> a'は同じ文字列になりません。彼らが何をするのかをよりよく理解するために_both_のドキュメントをお読みください。 –

+0

@PaulMcKenzieはstrとしてその改行文字を含むので、値1を与えますか? –

答えて

1

fgets()セクション7.21.7.2 fgets 機能the C standardのあたりに、任意の改行を削除しません:

fgets機能からnで指定された た文字の数よりも多くても1つ少ない読み込みますstream によって指し示されるストリームは、sによって指し示される配列に指し示される。改行文字(保持される)の後またはファイルの終わりの後に追加の文字は読み取られません。 ヌル文字は、最後の文字の直後に書き込まれ、 が配列に読み込まれます。

関連する問題