此代码无效,因为未进行比较。为什么呢?
所有名称都超过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);
}
答案 0 :(得分:57)
要比较两个C字符串(char *
),请使用strcmp()
。当字符串相等时,函数返回0
,因此您需要在代码中使用它:
if (strcmp(namet2, nameIt2) != 0)
如果您(错误地)使用
if (namet2 != nameIt2)
你正在比较两个字符串的指针(地址),当你有两个不同的指针时它们是不相等的(在你的情况下总是如此)。
答案 1 :(得分:10)
要比较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;
}
答案 2 :(得分:7)
答案 3 :(得分:3)
你试着在这里比较指针,而不是指向的内容(即你的角色)。
您必须使用memcmp
或str{,n}cmp
来比较内容。
答案 4 :(得分:2)
数组的名称表示起始地址。 namet2
和nameIt2
的起始地址不同。所以等于(==
)运算符检查地址是否相同。为了比较两个字符串,更好的方法是使用strcmp()
,或者我们可以使用循环逐个字符地进行比较。
答案 5 :(得分:2)
回答你问题中的原因:
因为等于运算符只能应用于简单变量类型,例如float
s,int
s或char
s和不更复杂的类型,例如结构或数组。
要确定两个字符串是否相等,必须逐个字符地显式比较两个字符串。
答案 6 :(得分:1)
您需要使用strcmp
:
strcmp(namet2, nameIt2)
答案 7 :(得分:1)
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 :)