|
20鱼币
任务描述
X同学是好学生。他每天严格按作息时间过着“宿舍-食堂-教室”三点一线的生活。他早6点前晚6点后在宿舍学习,早上6点至7点、中午12点至1点、下午5点至6点在食堂吃饭,其余时间在教室上课。
你知道X现在在哪里吗?(不许用if语句和switch语句)
输入格式:
一行中给出当天的一个时间点,形如:HH:MM:SS,HH表示小时,MM表示分,SS表示秒,全天时间采用24小时制表示。
输出格式:
根据不同情况,输出一行文本,确定在宿舍输出:dormitory;确定在食堂输出:canteen;确定在教室输出:classroom;两段时间交接处不确定在哪里时输出:on the way。
我写的程序是#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d:%d:%d",&a,&b,&c);
((a==6)&&(b==0)&&(c==0))?printf("on the way"):((a<6)||(a>18))?printf("dormitory"):((6<a&&a<7)||(12<a&&a<13)||(17<a&&a<18))?printf("canteen"):((7<a&&a<12)||(13<a&&a<17))?printf("classroom"):1;
((a==7)&&(b==0)&&(c==0))?printf("on the way"):((a==12)&&(b==0)&&(c==0))?printf("on the way"):((a==13)&&(b==0)&&(c==0))?printf("on the way"):((a==17)&&(b==0)&&(c==0))?printf("on the way"):((a==18)&&(b==0)&&(c==0))?printf("on the way"):1;
}
它有一些时间的输入输出不了结果,麻烦帮忙看看指出错误在哪里,谢谢。
代码错误分析:
1. 输入格式问题:在 scanf函数中,时间的分隔符应为冒号 :而不是中文冒号 :。正确的格式为 %d:%d:%d。
2. 逻辑错误:大括号的位置和条件判断有问题。当前的代码会执行所有的判断语句,而不是根据条件输出一个特定的结果。这导致了多个输出的情况。
3. 缺少返回值: main函数的返回类型是 int,但是没有在最后添加返回语句 return 0;。
以下是修复后的代码:
- #include <stdio.h>
- int main() {
- int a, b, c;
- scanf("%d:%d:%d", &a, &b, &c);
- if ((a == 6 && b == 0 && c == 0) ||
- (a == 7 && b == 0 && c == 0) ||
- (a == 12 && b == 0 && c == 0) ||
- (a == 13 && b == 0 && c == 0) ||
- (a == 17 && b == 0 && c == 0) ||
- (a == 18 && b == 0 && c == 0)) {
- printf("on the way");
- } else if (a < 6 || a > 18) {
- printf("dormitory");
- } else if ((6 < a && a < 7) || (12 < a && a < 13) || (17 < a && a < 18)) {
- printf("canteen");
- } else if ((7 < a && a < 12) || (13 < a && a < 17)) {
- printf("classroom");
- }
-
- return 0;
- }
复制代码
请注意代码的排版和缩进,这有助于提高代码的可读性和易于理解。
还有一种更简洁的方法来处理这个问题,可以使用逻辑运算符和条件表达式来减少代码的复杂性。以下是相应的修改后的代码:
- #include <stdio.h>
- int main() {
- int a, b, c;
- scanf("%d:%d:%d", &a, &b, &c);
- if ((a == 6 && b == 0 && c == 0) ||
- (a == 7 && b == 0 && c == 0) ||
- (a == 12 && b == 0 && c == 0) ||
- (a == 13 && b == 0 && c == 0) ||
- (a == 17 && b == 0 && c == 0) ||
- (a == 18 && b == 0 && c == 0)) {
- printf("on the way");
- } else if ((a < 6 || a > 18) ? 1 : (((6 < a && a < 7) || (12 < a && a < 13) || (17 < a && a < 18)) ? 1 : ((7 < a && a < 12) || (13 < a && a < 17)))) {
- printf("dormitory");
- } else if ((6 < a && a < 7) || (12 < a && a < 13) || (17 < a && a < 18)) {
- printf("canteen");
- } else if ((7 < a && a < 12) || (13 < a && a < 17)) {
- printf("classroom");
- }
-
- return 0;
- }
复制代码
这种改进可以将条件表达式嵌套减少,但对于初学者来说可能会更难理解。
球一个最佳答案谢谢啦!这对我非常重要!  
|
最佳答案
查看完整内容
代码错误分析:
1. 输入格式问题:在scanf函数中,时间的分隔符应为冒号:而不是中文冒号:。正确的格式为%d:%d:%d。
2. 逻辑错误:大括号的位置和条件判断有问题。当前的代码会执行所有的判断语句,而不是根据条件输出一个特定的结果。这导致了多个输出的情况。
3. 缺少返回值:main函数的返回类型是int,但是没有在最后添加返回语句return 0;。
以下是修复后的代码:
请注意代码的排版和缩进,这有助于提高代码的可读性和 ...
|