1613551 发表于 2022-5-6 17:09:13

两个重复的判断条件有什么用吗?

为什么小甲鱼第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:07

两个一样不代表两个的结果一样。判断汉字要双字节内容一样才相同。
这代码是你自己写的吗?这实现的有问题啊

1613551 发表于 2022-5-7 09:14:14

风车呼呼呼 发表于 2022-5-6 21:25
两个一样不代表两个的结果一样。判断汉字要双字节内容一样才相同。
这代码是你自己写的吗?这实现的有问题 ...

这不是我写的,是小甲鱼的程序

风车呼呼呼 发表于 2022-5-7 10:20:08

1613551 发表于 2022-5-7 09:14
这不是我写的,是小甲鱼的程序

这代码有问题。35应该是else if,最后打印相同的语句应该是index-1

逆鳞丶樱之羽 发表于 2022-5-8 13:55:50

就你这条代码来说`*target1++ != *target2++ || *target1++ != *target2++`,当左边*target1++ != *target2++为真时,右边的*target1++ != *target2++这条语句不执行,也就是说只有当左边*target1++ != *target2++为假时,右边*target1++ != *target2++才会执行,但由于后置++的存在,当左边为假时target1与target2地址内存储的值已加一,当判断右边*target1++ != *target2++时,target1与target2地址内存储的值已经不一样了。

1613551 发表于 2022-5-8 19:51:12

逆鳞丶樱之羽 发表于 2022-5-8 13:55
就你这条代码来说`*target1++ != *target2++ || *target1++ != *target2++`,当左边*target1++ != *target2 ...

牛哇,这样说我就理解了
页: [1]
查看完整版本: 两个重复的判断条件有什么用吗?