Ce code ne fonctionne pas car la comparaison n'est pas en cours. Pourquoi?
Tous les noms dépassent la 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);
}
Pour comparer deux chaînes C (char *
), utilisez strcmp()
. La fonction retourne 0
lorsque les chaînes sont égales, vous devrez donc utiliser ceci dans votre code:
if (strcmp(namet2, nameIt2) != 0)
Si vous utilisez (à tort)
if (namet2 != nameIt2)
vous comparez les pointeurs (adresses) des deux chaînes, qui sont inégaux lorsque vous avez deux pointeurs différents (ce qui est toujours le cas dans votre situation).
Pour comparer 2 chaînes, utilisez la fonction intégrée strcmp()
à l'aide du fichier d'en-tête string.h
.
if(strcmp(a,b)==0)
printf("Entered strings are equal");
else
printf("Entered strings are not equal");
OU vous pouvez écrire votre propre fonction comme ceci:
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;
}
Vous comparez actuellement les adresses des deux chaînes.
Utilisez strcmp pour comparer les valeurs de deux tableaux de caractères
if (strcmp(namet2, nameIt2) != 0)
Vous essayez de comparer les pointeurs ici, pas le contenu de ce qui est pointé (vos personnages, par exemple).
Vous devez utiliser memcmp
ou str{,n}cmp
pour comparer le contenu.
Pour répondre au POURQUOI dans votre question:
Parce que l'opérateur d'égalité ne peut être appliqué qu'à des types de variables simples, tels que float
s, int
s ou char
s, et not à des types plus sophistiqués, tels que structures ou tableaux ..__ les chaînes sont égales, vous devez explicitement comparer les deux chaînes de caractères, caractère par caractère.
Le nom du tableau indique l'adresse de départ. Les adresses de départ de namet2
et nameIt2
sont différentes. Ainsi, l'opérateur égal à (==
) vérifie si les adresses sont identiques ou non. Pour comparer deux chaînes, une meilleure méthode consiste à utiliser strcmp()
ou de comparer caractère par caractère à l'aide d'une boucle.
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 :)
Vous devez utiliser strcmp
:
strcmp(namet2, nameIt2)