web-dev-qa-db-ja.com

Cの2つの文字列を比較しますか?

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

すべての名前は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);
}
30
user1955438

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

_if (strcmp(namet2, nameIt2) != 0)
_

(間違って)使用する場合

_if (namet2 != nameIt2)
_

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

59
Veger

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

_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;
}
_
12
Aakash

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

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

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

ここでポインタを比較してみてください。ポインタの内容(つまり、あなたのキャラクター)ではありません。

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

3
fge

質問の理由に答えるには:

等号演算子は、floats、ints、またはcharsなどの単純な変数タイプにのみ適用でき、より高度なタイプにはnot構造または配列など。 2つの文字列が等しいかどうかを判断するには、2つの文字列を文字ごとに明示的に比較する必要があります。

2
Amjad

配列の名前は開始アドレスを示します。 _namet2_と_nameIt2_の両方の開始アドレスが異なります。したがって、(_==_)演算子は、アドレスが同じかどうかをチェックします。 2つの文字列を比較するためのより良い方法は、strcmp()を使用するか、ループを使用して文字ごとに比較することです。

2
Rajesh
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 :)
1
vaibhav sharma

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

strcmp(namet2, nameIt2)
1
jgr