31

此代码不起作用,因为没有进行比较。为什么?

所有名字都过去了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);
}
4

8 回答 8

68

要比较两个 C 字符串 ( char *),请使用strcmp(). 该函数0在字符串相等时返回,因此您需要在代码中使用它:

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

如果您(错误地)使用

if (namet2 != nameIt2)

您正在比较两个字符串的指针(地址),当您有两个不同的指针时它们是不相等的(在您的情况下总是如此)。

于 2013-01-09T10:23:19.330 回答
15

strcmp()要比较 2 个字符串,请使用使用头文件的内置函数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;
}
于 2014-08-11T18:08:30.090 回答
7

您当前正在比较两个字符串的地址。

使用strcmp比较两个 char 数组的值

 if (strcmp(namet2, nameIt2) != 0)
于 2013-01-09T10:23:15.180 回答
3

您尝试在这里比较指针,而不是指向的内容(即您的角色)。

您必须使用memcmpstr{,n}cmp来比较内容。

于 2013-01-09T10:24:39.977 回答
2

数组的名称表示起始地址。namet2两者的起始地址nameIt2不同。所以等于 ( ==) 运算符检查地址是否相同。对于比较两个字符串,更好的方法是使用strcmp(),或者我们可以使用循环逐字符比较。

于 2013-01-09T11:27:16.833 回答
1

您需要使用strcmp

strcmp(namet2, nameIt2)
于 2013-01-09T10:24:06.127 回答
1

要回答您问题中的 WHY:

因为相等运算符只能应用于简单的变量类型,例如floats、ints 或chars,而不能应用于更复杂的类型,例如结构或数组。要确定两个字符串是否相等,您必须逐个字符显式地比较两个字符串。

于 2016-12-28T17:23:57.047 回答
0
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 :)
于 2014-08-02T19:00:09.567 回答