15917579239 发表于 2017-5-8 23:50:32

课后作业S1E19

#include <stdio.h>

#define MAX 1024

int main()
{
      char str1;
      char str2;
      int i = 0;
      unsigned int n;

      printf("请输入第一个字符串:");
      while ((str1 = getchar()) != '\n')
                ;

      printf("请输入第二个字符串:");
      i = 0;
      while ((str2 = getchar()) != '\n')
                ;

      printf("请输入比较的字符数:");
      scanf("%u", &n);

      for (i = 0; i < n; i++)
      {
                if (str1 - str2)
                {
                        i++;
                        break;
                }
      }

      printf("比较的结果是:%d\n", str1 - str2);

      return 0;
}
最后那句printf("比较的结果是:%d\n", str1 - str2);   里面的str1- str2   为什么里面i要减1?

machimilk 发表于 2017-5-9 00:23:23

因为你if条件是当字符不相等的时候触发的,触发后执行了{ }里面的i++,所以要比较不同字符差了多少,就要在下标-1 ,换种写法
for (i = 0; i < n; i++)
        {
                if (str1 - str2)
                {
                       
                        break;
                }
        }

        printf("比较的结果是:%d\n", str1 - str2);


效果和你的一样,对比一下就明白了

CoolJoJo 发表于 2019-7-23 16:23:49

machimilk 发表于 2017-5-9 00:23
因为你if条件是当字符不相等的时候触发的,触发后执行了{ }里面的i++,所以要比较不同字符差了多少,就要在 ...

不对吧

画载舟中 发表于 2019-10-5 17:40:00

for (i = 0; i < n; i++)
      {
                if (str1 - str2)
                {
                        
                        break;
                }
      }

      printf("比较的结果是:%d\n", str1 - str2);


for()循环那比如 n 是 3      i(2) < n(3) 真执行里面循环体    然后   i(2)+1再去判断下一个循环   i(3) < n(3) 假跳出循环   i 不 -1就变成 str[ i(3) ]    访问第四个元素了(和你想访问的 n(3) 不符合)
页: [1]
查看完整版本: 课后作业S1E19