【发布时间】:2020-02-18 11:08:23
【问题描述】:
我一直试图理解这个 for 循环背后的逻辑,但我一直无法理解。问题要求输入一个整数n(测试用例数),后跟n 个字符,每个字符表示星期几。所以我需要输出一天 n 次。
#include <stdio.h>
int main()
{
int n, i;
char ch;
scanf("%d",&n);
for (i = 0; i < 2 * n; i += 1)
{
scanf("%c", &ch);
switch (ch)
{
case 'M':
printf("Monday\n");
break;
case 'T':
printf("Tuesday\n");
break;
case 'W':
printf("Wednesday\n");
break;
case 'H':
printf("Thursday\n");
break;
case 'F':
printf("Friday\n");
break;
case 'S':
printf("Saturday\n");
break;
case 'N':
printf("Sunday\n");
break;
}
}
return 0;
}
我不明白i<2*n 的逻辑。因此,例如,当我输入n=2 后跟字符M M,并且i 初始化为0 时,检查0 < 4 的条件是否为真,因此输入第一个字符M,然后@ 987654330@ 打印一次,现在 i 递增到 1 并与 1 < 4 进行检查,这是真的并再次打印。现在它已经打印了两次,但是根据i < 2 * n 的逻辑,在4 < 4 终止for 循环之前,Monday 不应该打印4 次吗?
但是这个逻辑在某种程度上是正确的。
我对@987654337@ 的逻辑由于某种原因不起作用,只能一次性输入和打印字符。我哪里错了?
【问题讨论】:
-
字母之间有空格
-
你能添加你的确切输入,以及你得到的输出,以及你期望的输出吗?正如@Jacob 建议的那样,您的输入中可能有额外的字符(空格或换行符,或...)。
-
添加一个
default案例,您printf接收到的ch值将向您显示正在发生的事情的提示。 -
问题是代码工作正常,但我只需要帮助来理解 for 循环中使用的逻辑,以及 i
标签: c loops for-loop scanf control-flow