鱼C论坛

 找回密码
 立即注册
查看: 643|回复: 7

[已解决]为什么会出现错误?

[复制链接]
发表于 2020-7-8 01:09:52 | 显示全部楼层 |阅读模式

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

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

x
*
**
***
****
*****
******
这是课程中的例子,老师用的是 for 嵌套来完成的。我想用 switch...case 来完成,语句如下:

#include<stdio.h>
void main()
{
        int i;
        i=1;
        switch(i)
        case 1 :
                {printf("*",i++);
                printf("\n");break;
                }
        case 2 :
                {printf("**",i++);
                printf("\n");break;
                }
        case 3 :
                {printf("***",i++);
                printf("\n");break;
                }
        case 4 :
                {printf("****",i++);
                printf("\n");break;
                }
        case 5 :
                {printf("*****",i++);
                printf("\n");break;
                }
        case 6 :
                {printf("******",i++);
                printf("\n");break;
                }
}


为什么会出现 :error C2046: illegal case 和 error C2043: illegal break 错误?
最佳答案
2020-7-8 08:30:24
1.楼主,switch其实并不是一个训环,你可以把它理解为比if更高级的判断语句,因为输出有5行,所以一定要用到循环语句,这里我们可以使用for(;i<=5;)来让他循环5次
2.修改后的代码,代码使用的是int main(),现在的编译器void main快淘汰了,容易报错

  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i;
  5.         i=1;
  6.         for(;i<=5;)
  7.         switch(i)
  8.         {
  9.                 case 1 :
  10.                 {printf("*",i++);
  11.                 printf("\n");break;
  12.                 }
  13.                 case 2 :
  14.                 {printf("**",i++);
  15.                 printf("\n");break;
  16.                 }
  17.                        case 3 :
  18.                 {printf("***",i++);
  19.                 printf("\n");break;
  20.                 }
  21.                 case 4 :
  22.                 {printf("****",i++);
  23.                 printf("\n");break;
  24.                 }
  25.                 case 5 :
  26.                 {printf("*****",i++);
  27.                 printf("\n");break;
  28.                 }
  29.                 case 6 :
  30.                 {printf("******",i++);
  31.                 printf("\n");break;
  32.                 }
  33.                 }
  34.     return 0;
  35. }
复制代码

3.可以使用嵌套的for语句改进代码
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int i,j=1;
  5.         i = 1;
  6.         for(;i<=5;i++)
  7.         {
  8.                 for(j=1;j<=i;j++)
  9.                         printf("*");
  10.                 printf("\n");
  11.             }
  12.         return 0;
  13. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-8 02:27:57 From FishC Mobile | 显示全部楼层
Switch(){    },Switch少了个花括号,而且break之后直接就跳出来Switch循环了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 02:39:48 From FishC Mobile | 显示全部楼层
运行了一下,程还是需要套一个for,改成下面这样可以正常打印了
#include <stdio.h>
int main()
{
        int i;
        i = 1;
        for (;;)
        {
                switch (i)
                {
                case 1:
                {
                        printf("*");
                        printf("\n");
                        i++;
                        continue;
                }
                case 2:
                {
                        printf("**");
                        printf("\n");
                        i++;
                        continue;
                }
                case 3:
                {
                        printf("***");
                        printf("\n");
                        i++;
                        continue;
                }
                case 4:
                {
                        printf("****");
                        printf("\n");
                        i++;
                        continue;
                }
                case 5:
                {
                        printf("*****");
                        printf("\n");
                        i++;
                        continue;
                }
                case 6:
                {
                        printf("******");
                        printf("\n");
                        i++;
                        break;
                }
                }
        }
        //getchar();
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 08:30:24 | 显示全部楼层    本楼为最佳答案   
1.楼主,switch其实并不是一个训环,你可以把它理解为比if更高级的判断语句,因为输出有5行,所以一定要用到循环语句,这里我们可以使用for(;i<=5;)来让他循环5次
2.修改后的代码,代码使用的是int main(),现在的编译器void main快淘汰了,容易报错

  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i;
  5.         i=1;
  6.         for(;i<=5;)
  7.         switch(i)
  8.         {
  9.                 case 1 :
  10.                 {printf("*",i++);
  11.                 printf("\n");break;
  12.                 }
  13.                 case 2 :
  14.                 {printf("**",i++);
  15.                 printf("\n");break;
  16.                 }
  17.                        case 3 :
  18.                 {printf("***",i++);
  19.                 printf("\n");break;
  20.                 }
  21.                 case 4 :
  22.                 {printf("****",i++);
  23.                 printf("\n");break;
  24.                 }
  25.                 case 5 :
  26.                 {printf("*****",i++);
  27.                 printf("\n");break;
  28.                 }
  29.                 case 6 :
  30.                 {printf("******",i++);
  31.                 printf("\n");break;
  32.                 }
  33.                 }
  34.     return 0;
  35. }
复制代码

3.可以使用嵌套的for语句改进代码
  1. #include <stdio.h>
  2. int main()
  3. {
  4.         int i,j=1;
  5.         i = 1;
  6.         for(;i<=5;i++)
  7.         {
  8.                 for(j=1;j<=i;j++)
  9.                         printf("*");
  10.                 printf("\n");
  11.             }
  12.         return 0;
  13. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 08:33:08 | 显示全部楼层
switch-case结构只需要一个大括号,而且遇到break停止(只需要在最后用break即可)
还有不建议把i++写到printf函数里
switch(i)
         {
         case 1 :
                 printf("*");
                 i++;
                 printf("\n");
                 
         case 2 :
                 printf("**");
                 i++;
                 printf("\n");
                 
         case 3 :
                 printf("***");
                 i++;
                 printf("\n");
                 
         case 4 :
                 printf("****");
                 i++;
                 printf("\n");
                 
         case 5 :
                 printf("*****");
                 i++;
                 printf("\n");
                 
         case 6 :
                 printf("******");
                 i++;
                 printf("\n");break;
                 }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-8 09:16:55 | 显示全部楼层
谢谢三位的解答! 要选择一个最佳答案,有点让我为难了。二楼的解答就是我的想法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-8 09:20:30 | 显示全部楼层
nanqi2333 发表于 2020-7-8 02:39
运行了一下,程还是需要套一个for,改成下面这样可以正常打印了
#include
int main()

谢谢你的解答! 我是初学,还没有学到 continue 语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-8 09:23:17 | 显示全部楼层
巴巴鲁 发表于 2020-7-8 08:33
switch-case结构只需要一个大括号,而且遇到break停止(只需要在最后用break即可)
还有不建议把i++写到pr ...

谢谢你的解答! 老师上课时反复交代,要养成好习惯,哪怕只有一行代码,也用大括号,方便检查,也不易出错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 15:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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