Подтвердить что ты не робот

Сравнение двух строк в C?

Этот код не работает, поскольку сравнение не выполняется. Почему?

Все имена проходят мимо 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);
}
4b9b3361

Ответ 1

Чтобы сравнить две строки C (char *), используйте strcmp(). Функция возвращает 0, когда строки равны, поэтому вам нужно будет использовать это в своем коде:

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

Если вы (ошибочно) используете

if (namet2 != nameIt2)

вы сравниваете указатели (адреса) обеих строк, которые неравны, если у вас есть два разных указателя (что всегда имеет место в вашей ситуации).

Ответ 2

Для сравнения двух строк используйте встроенную функцию strcmp() с помощью файла заголовка string.h

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

Ответ 3

В настоящее время вы сравниваете адреса двух строк.

Используйте strcmp, чтобы сравнить значения двух char массивов

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

Ответ 4

Вы пытаетесь сравнить указатели здесь, а не содержимое того, на что указывает (т.е. ваши символы).

Для сравнения содержимого вы должны использовать memcmp или str{,n}cmp.

Ответ 5

Имя массива указывает начальный адрес. Начальный адрес как namet2, так и nameIt2 отличается. Таким образом, оператор равен (==) проверяет, совпадают ли эти адреса или нет. Для сравнения двух строк лучше использовать strcmp(), или мы можем сравнивать символ по символу с помощью цикла.

Ответ 6

Чтобы ответить на вопрос "ПОЧЕМУ" в вашем вопросе:

Поскольку оператор равенства может применяться только к простым типам переменных, таким как float s, int s или char s, а не для более сложных типов, таких как структуры или массивы. Чтобы определить, равны ли две строки, вы должны явно сравнить символ символа символа по символу.

Ответ 7

Вам нужно использовать strcmp:

strcmp(namet2, nameIt2)

Ответ 8

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 :)