鱼C论坛

 找回密码
 立即注册
查看: 1740|回复: 3

[已解决]为什么if语句后的所有语句都执行了啊

[复制链接]
发表于 2023-10-1 13:48:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目是
输入第一行按照hh:mm的格式给出当前时间。其中hh是小时,在00到23之间;mm是分钟,在00到59之间。

输出格式:
根据当前时间替大笨钟敲钟,即在一行中输出相应数量个Dang。如果不是敲钟期,则输出:

Only hh:mm.  Too early to Dang.
其中hh:mm是输入的时间。
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int h,m;
  5.         scanf("%d:%d",&h,&m);
  6.         if(h<12) printf("Only %d:%d.  Too early to Dang.",h,m);
  7.         if(h==12&&m==0) printf("Only %d:%d.  Too early to Dang.",h,m);
  8.         if((h=12&&m!=0)||(h==13&&m==0)) printf("Dang");
  9.         if((h=13&&m!=0)||(h==14&&m==0)) printf("DangDang");
  10.         if((h=14&&m!=0)||(h==15&&m==0)) printf("DangDangDang");
  11.         if((h=15&&m!=0)||(h==16&&m==0)) printf("DangDangDangDang");
  12.         if((h=16&&m!=0)||(h==17&&m==0)) printf("DangDangDangDangDang");
  13.         if((h=17&&m!=0)||(h==18&&m==0)) printf("DangDangDangDangDangDang");
  14.         if((h=18&&m!=0)||(h==19&&m==0)) printf("DangDangDangDangDangDangDang");
  15.         if((h=19&&m!=0)||(h==20&&m==0)) printf("DangDangDangDangDangDangDangDang");
  16.         if((h=20&&m!=0)||(h==21&&m==0)) printf("DangDangDangDangDangDangDangDangDang");
  17.         if((h=21&&m!=0)||(h==22&&m==0)) printf("DangDangDangDangDangDangDangDangDangDang");
  18.         if((h=22&&m!=0)||(h==23&&m==0)) printf("DangDangDangDangDangDangDangDangDangDangDang");
  19.         if(h=23&&m!=0) printf("DangDangDangDangDangDangDangDangDangDangDangDang");
  20. }
复制代码
最佳答案
2023-10-1 13:49:58
在给出的代码中,if语句后的所有语句都执行了的原因是因为在条件判断中使用了赋值运算符(=)而不是相等运算符(==)。在C/C++中,单个等号是赋值运算符,用于将右侧的值赋给左侧的变量。相等运算符是双等号(==),用于判断两个值是否相等。

下面是对代码进行修改后的正确版本:
  1. #include <stdio.h>
  2. int main() {
  3.     int h, m;
  4.     scanf("%d:%d", &h, &m);
  5.    
  6.     if (h < 12) {
  7.         printf("Only %d:%d.  Too early to Dang.", h, m);
  8.     }
  9.     else if (h == 12 && m == 0) {
  10.         printf("Only %d:%d.  Too early to Dang.", h, m);
  11.     }
  12.     else if ((h == 12 && m != 0) || (h == 13 && m == 0)) {
  13.         printf("Dang");
  14.     }
  15.     else if ((h == 13 && m != 0) || (h == 14 && m == 0)) {
  16.         printf("DangDang");
  17.     }
  18.     else if ((h == 14 && m != 0) || (h == 15 && m == 0)) {
  19.         printf("DangDangDang");
  20.     }
  21.     // 继续添加其他时刻的判断条件和相应的输出
  22.    
  23.     return 0;
  24. }
复制代码

在修改后的代码中,我们使用了双等号(==)进行条件判断,确保只有符合条件的语句会被执行。同时,我们也添加了适当的分号和花括号,以确保代码逻辑的正确性。

希望这个回答能够解决你的问题。如果还有其他疑问,请随时提出。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-1 13:49:03 | 显示全部楼层
问题在于if语句后的判断条件使用了赋值操作符“=”,导致整个表达式的值都变成了赋值后的值,而不是判断条件。因此,所有的if语句都会执行,导致输出结果不符合预期。

正确的写法是使用比较操作符“==”来进行判断条件,如下所示:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int h, m;
  5.     scanf("%d:%d", &h, &m);
  6.     if (h < 12)
  7.         printf("Only %d:%d. Too early to Dang.", h, m);
  8.     else
  9.     {
  10.         int cnt = h - 12;
  11.         if (m > 0)
  12.             cnt++;
  13.         for (int i = 0; i < cnt; i++)
  14.             printf("Dang");
  15.     }
  16.     return 0;
  17. }
复制代码


此代码中,我们使用了else语句来避免重复判断。同时,我们使用了一个计数器cnt来记录应该输出几个“Dang”,而不是使用多个if语句进行判断。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-1 13:49:07 | 显示全部楼层
if语句后的所有语句都执行了,是因为这里使用了赋值运算符=而不是等于运算符==。在if语句中,应该使用等于运算符==来判断两个值是否相等。

例如,在下面的代码中,if语句应该使用等于运算符==

  1. if (h == 23 && m != 0) {
  2.     printf("DangDangDangDangDangDangDangDangDangDangDangDang");
  3. }
复制代码


而不是赋值运算符=,如下所示:

  1. if (h = 23 && m != 0) {
  2.     printf("DangDangDangDangDangDangDangDangDangDangDangDang");
  3. }
复制代码


此外,还要注意每个if语句之间的关系。在这种情况下,应该使用if-else if结构,以确保只有一个条件被满足时才会执行相应的代码。例如:

  1. if (h < 12 || (h == 12 && m == 0)) {
  2.     printf("Only %02d:%02d. Too early to Dang.", h, m);
  3. } else if (h >= 12 && m == 0) {
  4.     for (int i = 0; i < h - 12; i++) {
  5.         printf("Dang");
  6.     }
  7. }
复制代码


以上代码中,第一个if语句用于判断时间是否早于12点,如果是,则输出“Too early to Dang.”。else if语句用于判断时间是否为整点,如果是,则根据小时数输出相应数量的“Dang”。如果都不是,则不会执行任何代码。

希望这可以帮助你解决问题。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-1 13:49:58 | 显示全部楼层    本楼为最佳答案   
在给出的代码中,if语句后的所有语句都执行了的原因是因为在条件判断中使用了赋值运算符(=)而不是相等运算符(==)。在C/C++中,单个等号是赋值运算符,用于将右侧的值赋给左侧的变量。相等运算符是双等号(==),用于判断两个值是否相等。

下面是对代码进行修改后的正确版本:
  1. #include <stdio.h>
  2. int main() {
  3.     int h, m;
  4.     scanf("%d:%d", &h, &m);
  5.    
  6.     if (h < 12) {
  7.         printf("Only %d:%d.  Too early to Dang.", h, m);
  8.     }
  9.     else if (h == 12 && m == 0) {
  10.         printf("Only %d:%d.  Too early to Dang.", h, m);
  11.     }
  12.     else if ((h == 12 && m != 0) || (h == 13 && m == 0)) {
  13.         printf("Dang");
  14.     }
  15.     else if ((h == 13 && m != 0) || (h == 14 && m == 0)) {
  16.         printf("DangDang");
  17.     }
  18.     else if ((h == 14 && m != 0) || (h == 15 && m == 0)) {
  19.         printf("DangDangDang");
  20.     }
  21.     // 继续添加其他时刻的判断条件和相应的输出
  22.    
  23.     return 0;
  24. }
复制代码

在修改后的代码中,我们使用了双等号(==)进行条件判断,确保只有符合条件的语句会被执行。同时,我们也添加了适当的分号和花括号,以确保代码逻辑的正确性。

希望这个回答能够解决你的问题。如果还有其他疑问,请随时提出。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 06:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表