it-swarm.com.de

Zwei Strings in C vergleichen?

Dieser Code funktioniert nicht, da der Vergleich nicht durchgeführt wird. Warum?

Alle Namen kommen an if vorbei.

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);
}
27
user1955438

Um zwei C-Strings (char *) zu vergleichen, verwenden Sie strcmp() . Die Funktion gibt 0 zurück, wenn die Zeichenfolgen gleich sind. In diesem Code müssten Sie Folgendes verwenden:

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

Wenn Sie (falsch) verwenden

if (namet2 != nameIt2)

sie vergleichen die Zeiger (Adressen) beider Zeichenfolgen, die ungleich sind, wenn Sie zwei verschiedene Zeiger haben (was in Ihrer Situation immer der Fall ist).

56
Veger

Verwenden Sie zum Vergleichen von 2 Zeichenfolgen die integrierte Funktion strcmp() mit der Headerdatei string.h 

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

ODER Sie können Ihre eigene Funktion wie folgt schreiben:

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

Sie vergleichen derzeit die Adressen der beiden Zeichenketten.

Verwenden Sie strcmp , um die Werte von zwei Char-Arrays zu vergleichen

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

Sie versuchen hier, Zeiger zu vergleichen, nicht den Inhalt dessen, worauf gezeigt wird (dh Ihre Zeichen).

Sie müssen entweder memcmp oder str{,n}cmp verwenden, um den Inhalt zu vergleichen.

3
fge

Um das WARUM in Ihrer Frage zu beantworten:

Der Gleichheitsoperator kann nur auf einfache Variablentypen angewendet werden, z. B. floats, ints oder chars und nicht auf komplexere Typen wie z. B. Strukturen oder Arrays ..__ Da die Zeichenfolgen gleich sind, müssen Sie die beiden Zeichenfolgen Zeichen für Zeichen explizit vergleichen. 

2
Amjad

Der Name des Arrays gibt die Startadresse an. Die Startadresse von namet2 und nameIt2 ist unterschiedlich. Der Operator gleich (==) prüft also, ob die Adressen gleich sind oder nicht. Um zwei Zeichenfolgen zu vergleichen, verwenden Sie strcmp() besser, oder Sie können Zeichen für Zeichen mithilfe einer Schleife vergleichen.

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

Sie müssen strcmp verwenden:

strcmp(namet2, nameIt2)
1
jgr