比較が行われていないため、このコードは機能していません。どうして?
すべての名前は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);
}
2つのC文字列(_char *
_)を比較するには、 strcmp()
を使用します。この関数は、文字列が等しい場合に_0
_を返すため、コードでこれを使用する必要があります。
_if (strcmp(namet2, nameIt2) != 0)
_
(間違って)使用する場合
_if (namet2 != nameIt2)
_
両方の文字列のポインター(アドレス)を比較していますが、2つの異なるポインターがある場合は等しくありません(これは常に状況に当てはまります)。
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;
}
_
ここでポインタを比較してみてください。ポインタの内容(つまり、あなたのキャラクター)ではありません。
内容を比較するには、memcmp
またはstr{,n}cmp
のいずれかを使用する必要があります。
質問の理由に答えるには:
等号演算子は、float
s、int
s、またはchar
sなどの単純な変数タイプにのみ適用でき、より高度なタイプにはnot構造または配列など。 2つの文字列が等しいかどうかを判断するには、2つの文字列を文字ごとに明示的に比較する必要があります。
配列の名前は開始アドレスを示します。 _namet2
_と_nameIt2
_の両方の開始アドレスが異なります。したがって、(_==
_)演算子は、アドレスが同じかどうかをチェックします。 2つの文字列を比較するためのより良い方法は、strcmp()
を使用するか、ループを使用して文字ごとに比較することです。
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 :)
strcmp
を使用する必要があります:
strcmp(namet2, nameIt2)