-2

私はこの以下のプログラムを持っています

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char text1[30],text2[30];
    int diff;
    puts("Enter text1:");
    fgets(text1,30,stdin);
    puts("Enter text2:");
    fgets(text2,30,stdin);
    diff=strcmp(text1,text2);
    printf("Difference between %s and %s is %d",text1,text2,diff);
}

text1 を inputtext として指定し、 text2 を differencetext として指定すると、差は 5 になるはずですが、異なる入力に対して 1 を取得しています。どこが間違っているのかわかりません。

4

5 に答える 5

6

C 標準の の仕様では、「 s1が指す文字列がs2strcmpが指す文字列よりも大きい、等しい、または小さいため、ゼロより大きい、等しい、または小さい整数を返す」とだけ述べられています。」 ( C 2011 N1570 7.24.4.2 3、C 2018同上)。

C 実装から追加の保証がない限り、特定の値を返すなど、より具体的な動作に依存することはできません。

于 2013-08-15T13:49:28.867 に答える
5

仕様が言っていることは、比較の結果に応じて、strcmp がゼロ「より小さい」、「より大きい」、または「等しい」数値を返すということだけです。

差が5であるべきだとあなたが信じる理由がわかりません。

于 2013-08-15T13:49:32.017 に答える
3

strcmp の機能を誤解していると思います。

int strcmp(const char *s1, const char *s2);

完了すると、が指す文字列がが指す文字列より大きい、等しい、または小さい場合、それぞれstrcmp()0 より大きい、等しい、または小さい整数を返します。s1s2

于 2013-08-15T13:49:19.927 に答える
0

cplusplus.comから:

strcmp戻り値について

文字列間の関係を示す整数値を返します。ゼロ値は、両方の文字列が等しいことを示します。ゼロより大きい値は、一致しない最初の文字の値が str2 よりも str1 の方が大きいことを示します。ゼロ未満の値はその反対を示しま​​す。

于 2013-08-15T13:49:35.090 に答える
-1

これstrcmpは、int を返すためです。first が second より小さい場合は負、second が first より小さい場合は非ゼロの正、等しい場合は 0 です。

于 2013-08-15T13:49:22.853 に答える