一道简单C语言题,求解

来源:百度知道 编辑:UC知道 时间:2024/06/16 02:15:11
#include<stdio.h>
#include<string.h>
void main()
{
char a[10];
scanf("%s",&a);
if(!strcmp(a,"are"))
printf("A\n");
else
printf("B\n");
getch();
}
这里strcmp(a,"are")中的a若输入are则值为零,但是不加前面的!就只能输出B不能输出A,这是为何,加了就可以。
能否详细点,假如a输入的不是are,那么就非零了,为何也跳至else???

strcmp这个函数是返回2个字符串的大小比较结果,strcmp(a, b)如果
a > b 返回 1
a == b 返回0
a < b 返回 -1
所以strcmp(a,"are")中有俩种情况那就是
1、a="are" 此时strcmp(a,"are")的值为0,而(!strcmp(a,"are"))的值为1
2、a!="are" 此时strcmp(a,"are")的值为非0,一切非0都默认为1 而(!strcmp(a,"are"))的值为0
所以当a="are"时,if语句执行 printf("A\n");
当a!="are"时,if语句执行 else之后的printf("B\n");

使用strcmp比较两个字符串时,若它们相同返回值为0,否则返回非0值。!表示将条件取反,当输入 'are'时,strcmp的返回值为0,!0即是1,从而条件成立,因此会输出A。

假如a输入的不是are。strcmp(a,"are")非零。则if(!strcmp(a,"are"))不成立。当然跳至else了。
if是以括号内表达式的值为判断条件的。如果要想输入are时执行且不加!。
则应写成if(strcmp(a,"are")==0)

我也是刚学c,我这样理解的,strcmpsh的返回值是0,前面加上!后,如果你给字符串a 值为are的话,if语句的判断句判断为非0,即为真,输出A,没有!的话,判断为假,执行else语句!输出B,但这时你要是给a赋值不是are的话,输出的就应该是A了!

strcmp这个函数是返回2个字符串的大小比较结果,strcmp(a, b)如果
a > b 返回 1
a == b 返回0
a < b 返回 -1