问题解答:
这段代码中的问题出在对变量 b 的输入处。尽管 b 被定义为 char 类型,本质上是可以被赋值的。然而,在接受用户输入时,使用了 scanf("%c", &b) 来获取字符,这可能导致意外的结果。
问题出现在输入回车键后,scanf 函数会将回车符(\n)作为下一个字符并将其放入 b 中。因此,当输入星期几的第一个字母后按下回车键,b 实际上会被赋值为 \n,而不是用户输入的第二个字母。这会导致程序不能正确判断星期几。
解决这个问题的一种方法是在 scanf 函数之前添加一个额外的 getchar(),用于吸收输入缓冲区中的回车符。修改后的代码如下:#include <stdio.h>int main(){ char a, b; while (1) { printf("Enter the first: "); scanf(" %c", &a); if (a != 'T') { break; } else if (a == 'T') { printf("Enter the second one: "); getchar(); // 吸收回车符 scanf("%c", &b); break; } else if (a == 'S') { printf("Enter the second one: "); getchar(); // 吸收回车符 scanf("%c", &b); break; } } switch (a) { case 'S': switch (b) { case 'a': printf("Today is Saturday!\n"); break; case 'u': printf("Today is Sunday!\n"); break; } break; case 'T': switch (b) { case 'u': printf("Today is Tuesday!\n"); break; case 'h': printf("Today is Thursday!\n"); break; } break; case 'M': printf("Today is Monday!\n"); break; case 'W': printf("Today is Wednesday!\n"); break; case 'F': printf("Today is Friday!\n"); break; } return 0;}
在修改后的代码中,使用了 getchar() 来吸收输入缓冲区中的回车符,这样就可以确保 scanf 函数正确读取用户输入的第二个字母。
希望这个解答对你有帮助!如果你有任何其他问题,请随时提问。
如果回答对你有帮助,请给我一个最佳答案!
|