两个重复的判断条件有什么用吗?
为什么小甲鱼第30行两个逻辑或的判断条件是一样的,为什么要这样写?不是多此一举吗?#include <stdio.h>
#define MAX 1024
int main()
{
char str1;
char str2;
char *target1 = str1;
char *target2 = str2;
char ch;
int index = 1, n;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
printf("请输入需要对比的字符个数:");
scanf("%d", &n);
while (n && *target1 != '\0' && *target2 != '\0')
{
ch = *target1;
if (ch < 0)
{
if (*target1++ != *target2++ || *target1++ != *target2++)
{
break;
}
}
if (*target1++ != *target2++)
{
break;
}
index++;
n--;
}
if ((n == 0) || (*target1 == '\0' && *target2 == '\0'))
{
printf("两个字符串的前 %d 个字符完全相同!\n", index);
}
else
{
printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
}
return 0;
} 两个一样不代表两个的结果一样。判断汉字要双字节内容一样才相同。
这代码是你自己写的吗?这实现的有问题啊 风车呼呼呼 发表于 2022-5-6 21:25
两个一样不代表两个的结果一样。判断汉字要双字节内容一样才相同。
这代码是你自己写的吗?这实现的有问题 ...
这不是我写的,是小甲鱼的程序 1613551 发表于 2022-5-7 09:14
这不是我写的,是小甲鱼的程序
这代码有问题。35应该是else if,最后打印相同的语句应该是index-1 就你这条代码来说`*target1++ != *target2++ || *target1++ != *target2++`,当左边*target1++ != *target2++为真时,右边的*target1++ != *target2++这条语句不执行,也就是说只有当左边*target1++ != *target2++为假时,右边*target1++ != *target2++才会执行,但由于后置++的存在,当左边为假时target1与target2地址内存储的值已加一,当判断右边*target1++ != *target2++时,target1与target2地址内存储的值已经不一样了。 逆鳞丶樱之羽 发表于 2022-5-8 13:55
就你这条代码来说`*target1++ != *target2++ || *target1++ != *target2++`,当左边*target1++ != *target2 ...
牛哇,这样说我就理解了
页:
[1]