鱼C论坛

 找回密码
 立即注册
查看: 1170|回复: 4

[已解决]请问我的switch语句哪里出了问题啊

[复制链接]
发表于 2020-9-15 16:50:10 | 显示全部楼层 |阅读模式

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

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

x
把其中一个case块注释掉又可以运行。。。

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         char dh;

  5.         printf("请输入要执行的语句块代号:");
  6.         scanf("%c", &dh);

  7.         switch (dh)
  8.         {
  9.                 case 'a' :
  10.                 int i = 1, sum = 0;
  11.                 while (i <= 100)
  12.                 {
  13.                 sum = sum + i;
  14.                 i = i + 1;
  15.                 }
  16.                 printf("结果是:%d\n", sum);
  17.                 break;

  18.                 case 'b' ://
  19.                 int count = 0;
  20.                 printf("请输入一个英文句子:");
  21.                 while (getchar() != '\n')
  22.                 {
  23.                         count = count + 1;
  24.                 }
  25.                 printf("你总共输入了%d个字符!\n", count);
  26.                 break;

  27.         }

  28.         return 0;
  29. }
复制代码
最佳答案
2020-9-15 17:06:10
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. int main(void)
  4. {
  5.         char dh;

  6.         printf("请输入要执行的语句块代号:");
  7.         scanf("%c", &dh);
  8.         int i = 1, sum = 0;             //这里放外面哦

  9.         switch (dh)
  10.         {
  11.                 case 'a':
  12.                         while (i <= 100)
  13.                         {
  14.                                 sum = sum + i;
  15.                                 i = i + 1;
  16.                         }
  17.                         printf("结果是:%d\n", sum);
  18.                         break;

  19.                 case 'b':            //你这里少了一层输入啊,已补上
  20.                         char input;
  21.                         int count = 0;
  22.                         printf("请输入一个英文句子:");
  23.                         scanf("%c", &input);
  24.                         while (getchar() != '\n')
  25.                         {
  26.                                 count = count + 1;
  27.                         }
  28.                         printf("你总共输入了%d个字符!\n", count);
  29.                         break;

  30.         }

  31.         return 0;
  32. }

复制代码


这样应该没问题了,解决了记得给的最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-15 17:00:44 | 显示全部楼层
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. int main(void)
  4. {
  5.         char dh;

  6.         printf("请输入要执行的语句块代号:");
  7.         scanf("%c", &dh);
  8.         int i = 1, sum = 0;                //放外面

  9.         switch (dh)
  10.         {
  11.                 case 'a':
  12.                         while (i <= 100)
  13.                         {
  14.                                 sum = sum + i;
  15.                                 i = i + 1;
  16.                         }
  17.                         printf("结果是:%d\n", sum);
  18.                         break;

  19.                 case 'b'://
  20.                         int count = 0;
  21.                         printf("请输入一个英文句子:");
  22.                         while (getchar() != '\n')
  23.                         {
  24.                                 count = count + 1;
  25.                         }
  26.                         printf("你总共输入了%d个字符!\n", count);
  27.                         break;

  28.         }

  29.         return 0;
  30. }
复制代码


你的i和sum变量的定义过程被switch case语句跳过了,放在外面就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-15 17:06:10 | 显示全部楼层    本楼为最佳答案   
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. int main(void)
  4. {
  5.         char dh;

  6.         printf("请输入要执行的语句块代号:");
  7.         scanf("%c", &dh);
  8.         int i = 1, sum = 0;             //这里放外面哦

  9.         switch (dh)
  10.         {
  11.                 case 'a':
  12.                         while (i <= 100)
  13.                         {
  14.                                 sum = sum + i;
  15.                                 i = i + 1;
  16.                         }
  17.                         printf("结果是:%d\n", sum);
  18.                         break;

  19.                 case 'b':            //你这里少了一层输入啊,已补上
  20.                         char input;
  21.                         int count = 0;
  22.                         printf("请输入一个英文句子:");
  23.                         scanf("%c", &input);
  24.                         while (getchar() != '\n')
  25.                         {
  26.                                 count = count + 1;
  27.                         }
  28.                         printf("你总共输入了%d个字符!\n", count);
  29.                         break;

  30.         }

  31.         return 0;
  32. }

复制代码


这样应该没问题了,解决了记得给的最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-15 17:39:03 | 显示全部楼层
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4.         char dh;

  5.         printf("请输入要执行的语句块代号:");
  6.         scanf("%c", &dh);
  7.         getchar();//过滤回车
  8.                 int i = 1, sum = 0, count=0;
  9.         switch (dh)
  10.         {
  11.                 case 'a' :
  12.                 while (i <= 100)
  13.                 {
  14.                 sum = sum + i;
  15.                 i = i + 1;
  16.                 }
  17.                 printf("结果是:%d\n", sum);
  18.                 break;

  19.                 case 'b' ://
  20.                 printf("请输入一个英文句子:");
  21.                 while (getchar() != '\n')
  22.                 {
  23.                         count = count + 1;
  24.                 }
  25.                 printf("你总共输入了%d个字符!\n", count);
  26.                 break;

  27.         }

  28.         return 0;
  29. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-15 17:44:29 | 显示全部楼层
  1. 薛非
  2. 薛非
  3. 《品悟C》作者
  4. 5 人赞同了该回答
  5. 这是C++代码,不是C代码。
  6. 在C语言中这是错误的写法。
  7. 因为C语言中labeled-statement的构成规则是
  8. case constant-expression : statement
  9. 注意,“:”后面跟的必须是statement
  10. 但是int ival;并不是statement,而是一个declaration
  11. 在C语言中declaration不是statement,所以代码根本不能这样写。
  12. 在C++中则有一种declaration-statement,也许代码可以这样写。但具体的语义我不是很清楚。
  13. 题外话:
  14. 1.你怎么看一个程序员分不清C和C++? 这种程序员是半吊子程序员,既不真正懂C,也不真正懂C++。
  15. 2.《C Primer Plus》一书中把声明说成语句是严重的概念错误,这是我讲这本书的某些概念不准确的原因。
复制代码

知乎
  1. https://www.zhihu.com/question/23051685
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-15 11:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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