小黑兹 发表于 2020-4-25 02:50:03

关于s1e15动手4(萌新求大大解答)

本帖最后由 小黑兹 于 2020-4-25 02:51 编辑

答案:
#include <stdio.h>

int main()
{
      int ch;

      printf("请输入明文:");

      while ((ch = getchar()) != '\n')
      {
                if (ch >= 'a' && ch <= 'z')
                {
                        putchar('a' + (ch - 'a' + 3) % 26);
                        continue;
                }

                if (ch >= 'A' && ch <= 'Z')
                {
                        putchar('A' + (ch - 'A' + 3) % 26);
                        continue;
                }

                putchar(ch);
      }

      putchar('\n');

      return 0;
}

关于

                if (ch >= 'A' && ch <= 'Z')
                {
                        putchar('A' + (ch - 'A' + 3) % 26);
                        continue;
                }

其中contiune跳过了什么
尝试将其去掉输出(去掉了大写中的):

请输入明文:abcxyz,ABCXYZ
defabc,DAEBFCAXBYCZ

问题:
为什么while循环中的非if内的最后一个putchar()函数没有被跳过,或者contiune跳过了什么。
为什么contiune去掉之后又输出原来的输入,这里的输入不是经过了计算吗,为什么第二次输出没有改变

BngThea 发表于 2020-4-25 02:50:04

为什么while循环中的非if内的最后一个putchar()函数没有被跳过,或者contiune跳过了什么。
没有满足两个if的时候,也就是输入了非英文字母的时候就会执行非if的putchar

为什么contiune去掉之后又输出原来的输入,这里的输入不是经过了计算吗,为什么第二次输出没有改变
后面的输出就是循环中的最后那个putchar的输出

1241702927 发表于 2020-4-25 23:38:56

问题1:continue的作用是但代码运行到这句时,结束后面的一切代码,重新回到while或for语句运行
问题2:可以详细一点说

沐丶心 发表于 2020-4-25 23:58:12

问题一:最下面哪个putchar()--如果你输出的字符不满足那两个if范围内则直接打印出来你输入的字符比如(.@#%等等)
问题二: 假设你去掉第一个if中的continue, 如果你输入a则在第一个if里执行得到结果 a+3=d打印d这个字符,因为(你删掉了跳转)所以程序继续执行下面的语句,于是就读到了最下面的putchar()打印你刚刚输入的a;

小黑兹 发表于 2020-4-26 00:19:21

BngThea 发表于 2020-4-25 02:50
为什么while循环中的非if内的最后一个putchar()函数没有被跳过,或者contiune跳过了什么。
没有满足两个 ...

懂了懂了,非常感谢,脑子卡住了没想出来这么简单的,谢谢

小黑兹 发表于 2020-4-26 00:21:15

沐丶心 发表于 2020-4-25 23:58
问题一:最下面哪个putchar()--如果你输出的字符不满足那两个if范围内则直接打印出来你输入的字符比如(.@#% ...

同样非常感谢你,答案简单明了,但可惜你来的有点迟我不能把最佳答案给你,当然我对你的回答表示非常感谢
页: [1]
查看完整版本: 关于s1e15动手4(萌新求大大解答)