Comparando dos cadenas en C?

Este código no funciona porque la comparación no se está realizando. ¿Por qué?

Todos los nombres pasan el 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); } 

Para comparar dos cadenas en C ( char * ), use strcmp() . La función devuelve 0 cuando las cadenas son iguales, por lo que necesitarías usar esto en tu código:

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

Si usas (equivocadamente)

 if (namet2 != nameIt2) 

está comparando los punteros (direcciones) de ambas cadenas, que son desiguales cuando tiene dos punteros diferentes (lo que siempre es el caso en su situación).

Para comparar 2 cadenas, use la función strcmp() usando el archivo de cabecera string.h

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

O puedes escribir tu propia función como esta:

 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; } 

Actualmente estás comparando las direcciones de las dos cadenas.

Utilice strcmp para comparar los valores de dos matrices de caracteres

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

Intenta comparar punteros aquí, no el contenido de lo que se apunta (es decir, tus personajes).

Debe usar memcmp o str{,n}cmp para comparar los contenidos.

El nombre de la matriz indica la dirección de inicio. La dirección de inicio de namet2 y nameIt2 son diferentes. Entonces el operador igual a ( == ) verifica si las direcciones son iguales o no. Para comparar dos cadenas, una mejor manera es usar strcmp() , o podemos comparar carácter por carácter usando un bucle.

Para responder el PORQUE en tu pregunta:

Debido a que el operador de igualdad solo se puede aplicar a tipos de variables simples, como float s, int s o char s, y no a tipos más sofisticados, como estructuras o arreglos . Para determinar si dos cadenas son iguales, debe comparar explícitamente las dos cadenas de caracteres carácter por carácter.

Necesitas usar strcmp :

 strcmp(namet2, nameIt2) 
 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 :)