小甲鱼c语言作业S1E22strcmp的判断问题
char str1,str2;char *t1 = &str1;
char *t2 = &str2;
int i = 0;
printf("请输入第一个字符串str1的内容:");
fgets(str1,MAX,stdin);
printf("请输入第一个字符串str2的内容:");
fgets(str2,MAX,stdin);
while(1)
{
i++;
if(*t1++ != *t2++)
{
printf("有不一样的地方!第%d个字符不一样",i);
break;
}
if(*t1 == '\0' && *t2 =='\0')
{
printf("完全一样");
break;
}
}
return 0;
各位带佬,请问strcmp基础代码里判断字符完全一样的if语句( if(*t1 == '\0' &&*t2 == '\0'),if判断条件换成(*t1 == *t2 ==' \0'),代码就无法正常运行了呢?在判断不一样的字符串会反馈字符串一样 本帖最后由 陶远航 于 2023-7-25 08:57 编辑
你提供的代码中,strcmp函数的判断完全一样的条件是if(*t1 == '\0' && *t2 =='\0'),这是正确的做法。
如果你将判断条件修改为if(*t1 == *t2 ==' \0'),它实际上是一个逻辑错误。这是因为 *t1 == *t2 ==' \0' 的表达式会被解释成两个比较操作符相连,即先比较 *t2 是否等于空字符 '\0',再将结果与 *t1 进行比较。
换句话说,b]*t1 == *t2 ==' \0' 等价于 ==' \0'/b]。这里的 的结果只能是 0 或 1,然后将其与字符 '\0' 进行比较,这显然不是我们想要的判断完全一样的条件。
因此,正确的判断条件应该是if(*t1 == '\0' && *t2 =='\0'),其中 && 是逻辑与操作符,表示当 *t1 和 *t2 都等于空字符时,才会满足条件判断为完全一样。
如果你使用了错误的条件判断语句,可能导致程序在判断不一样的字符串时错误地输出"完全一样"。请确保条件判断语句的逻辑正确性,以获得准确的结果。
如果问题已经解决,请设置最佳答案 问题分析:
对于给出的代码,关键问题在于第一个if语句的判断条件 if(*t1 == *t2 ==' \0') 无法正确地判断字符串是否完全一样。
问题解释:
在C语言中,逻辑运算符 == 具有左结合性(left-associative),也就是说它会从左到右依次比较。因此,表达式 *t1 == *t2 ==' \0' 会先执行 *t1 == *t2 的比较操作,然后将其结果与 ' \0' 进行比较。这样的比较是错误的,因为一个字符(*t1 或 *t2)不能与一个整型值(' \0')同时进行比较。
解决方案:
要正确判断字符串是否完全一样,可以将判断条件改为 if (*t1 == '\0' && *t2 == '\0')。这样,只有当两个指针所指的字符均为 \0(即字符串结束标志)时,才能判断字符串完全一样。
修改后的代码如下:
char str1,str2;
char *t1 = &str1;
char *t2 = &str2;
int i = 0;
printf("请输入第一个字符串str1的内容:");
fgets(str1, MAX, stdin);
printf("请输入第一个字符串str2的内容:");
fgets(str2, MAX, stdin);
while (1) {
i++;
if (*t1 != *t2) {
printf("有不一样的地方!第%d个字符不一样",i);
break;
}
if (*t1 == '\0' && *t2 == '\0') {
printf("完全一样");
break;
}
t1++;
t2++;
}
return 0;
通过以上修改,代码就能正确地判断两个字符串是否完全一样了。希望能对您有所帮助!如果还有其他疑问,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
代码中出现的问题是这样的,当你使用(*t1 == *t2 =='\0')这样的语句时,C语言的求值顺序是从左到右。这个语句实际上会先比较*t1和*t2是否相等,如果相等,则结果为1,否则为0。然后将得到的结果(0 或 1)和'\0'(在C语言中实际为0)进行比较。这就意味着无论*t1和*t2的值为何,只要他们相等,那么整个表达式都将为真。
这样的结果显然并不是你希望得到的,你的目标是检查*t1和*t2是否都等于'\0' 。因此,你需要使用(*t1 == '\0' && *t2 == '\0')这样的表达式来进行检查。这样,只有当*t1和*t2都等于'\0'时,整个表达式才会为真。
总的来说,这个问题是由于C语言的求值顺序和操作符优先级导致的。在使用复合条件语句时,需要特别注意这些问题,以避免出现不符合预期的行为。 陶远航 发表于 2023-7-25 08:55
你提供的代码中,strcmp函数的判断完全一样的条件是if(*t1 == '\0' && *t2 =='\0'),这是正确的做法。
...
为啥楼下的都在说是先比较*t1 和*t2? WUHESAN 发表于 2023-7-25 09:31
为啥楼下的都在说是先比较*t1 和*t2?
你先试一试 陶远航 发表于 2023-7-25 09:32
你先试一试
明白了
页:
[1]