31

比較が行われていないため、このコードは機能していません。なんで?

すべての名前はif.

printf("Enter Product: \n");
scanf("%s", &nameIt2);
printf("Enter Description: \n");
scanf("%s", &descriptionI);
printf("Enter Quantity: \n");
scanf("%d", &qtyI);
printf("Enter Order Quantity: \n");
scanf("%s", &ordqtyI);

while (fscanf(fp4, "%s %s %d %s\n", &namet2, &description2, &qty2, &ordqty2) != EOF){
    if(namet2 != nameIt2)
        fprintf(fpt2, "%s %s %d %s\n", &namet2, &description2, qty2, &ordqty2);
}
4

8 に答える 8

68

2 つの C 文字列 ( char *) を比較するには、 を使用しますstrcmp()。関数は文字列が等しい場合に戻る0ため、コードでこれを使用する必要があります。

if (strcmp(namet2, nameIt2) != 0)

あなたが(間違って)使用する場合

if (namet2 != nameIt2)

両方の文字列のポインター (アドレス) を比較していますが、2 つの異なるポインターがある場合は等しくありません (状況では常にそうです)。

于 2013-01-09T10:23:19.330 に答える
15

strcmp()2 つの文字列を比較するには、ヘッダー ファイルを使用して組み込み関数を使用します。string.h

if(strcmp(a,b)==0)
    printf("Entered strings are equal");
else
    printf("Entered strings are not equal");

または、次のように独自の関数を作成できます。

int string_compare(char str1[], char str2[])
{
    int ctr=0;

    while(str1[ctr]==str2[ctr])
    {
        if(str1[ctr]=='\0'||str2[ctr]=='\0')
            break;
        ctr++;
    }
    if(str1[ctr]=='\0' && str2[ctr]=='\0')
        return 0;
    else
        return -1;
}
于 2014-08-11T18:08:30.090 に答える
7

現在、2 つの文字列のアドレスを比較しています。

strcmpを使用して 2 つの char 配列の値を比較する

 if (strcmp(namet2, nameIt2) != 0)
于 2013-01-09T10:23:15.180 に答える
3

指し示されている内容 (つまり、文字) ではなく、ここでポインターを比較してみてください。

内容を比較するには、memcmpまたはのいずれかを使用する必要があります。str{,n}cmp

于 2013-01-09T10:24:39.977 に答える
1

質問の WHY に答えるには:

float等値演算子は、s、ints、またはcharsなどの単純な変数型にのみ適用でき、構造体や配列などのより高度な型には適用できないためです。2 つの文字列が等しいかどうかを判断するには、2 つの文字列を 1 文字ずつ明示的に比較する必要があります。

于 2016-12-28T17:23:57.047 に答える
1

使用する必要がありますstrcmp

strcmp(namet2, nameIt2)
于 2013-01-09T10:24:06.127 に答える
0
if(strcmp(sr1,str2)) // this returns 0 if strings r equal 
    flag=0;
else flag=1; // then last check the variable flag value and print the message 

                         OR

char str1[20],str2[20];
printf("enter first str > ");
gets(str1);
printf("enter second str > ");
gets(str2);

for(int i=0;str1[i]!='\0';i++)
{
    if(str[i]==str2[i])
         flag=0;
    else {flag=1; break;}
}

 //check the value of flag if it is 0 then strings r equal simple :)
于 2014-08-02T19:00:09.567 に答える