为什么直接比较数字不行,一定要用字符串处理函数

img

img


程序的第29行,为什么一定要像第1张图那样用字符串处理函数才能够比较条件是否成立,像第2张图那样直接比较数字是否相等为什么不行?

因为只有数字类型的变量才能用==来比较是否相等,而字符串不能用==直接比较,这是由数据类型的存储结构不同决定的。就是这样做的。望采纳

直接比较数字是可行的,但你第二张图中的写法错了,所以才没得到想要的结果。第二张图中比较的是指针,不是预期的数字

下图使用==号做比较实际上只比较了字符串首地址的大小,后续字符并没有作比较;
而使用strcmp函数比较,它为int strcmp(const char *str1, const char *str2),参数是把 str1 所指向的字符串和 str2 所指向的字符串进行比较,当比较时,函数中会移动到下一个字符,当其结果大于0时,表示如果返回值小于 0,则表示 str1 小于 str2;如果返回值大于 0,则表示 str1 大于 str2;如果返回值等于 0,则表示 str1 等于 str2。
当然,字符串比较也不是不可以使用==比较,但是这样子比较比较麻烦,需要自己写循环依次比较两个字符串相同位置的字符是否相等。

这就是语法规定(乌龟的屁股),例如为什么要用main函数的写法。记住就好了,望采纳

因为字符数组不能用==直接比较,或者您把字符数组改成字符串,那样就可以了。

因为结构体 struct student 里成员 char num[10]; 是字符串数组,字符串比较大小只能通过字符串处理函数进行(strcmp() 函数)。
如果将结构体里成员 char num[10] 改为 int num; 那么第2图里 fun( student stu[] , int num) 第2个参数的类型也改为 int num , 下面的if()里就可以直接用 == 号作比较了。