风过无痕1989 发表于 2020-7-8 01:09:52

为什么会出现错误?

*
**
***
****
*****
******
这是课程中的例子,老师用的是 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 错误?

nanqi2333 发表于 2020-7-8 02:27:57

Switch(){    },Switch少了个花括号,而且break之后直接就跳出来Switch循环了。

nanqi2333 发表于 2020-7-8 02:39:48

运行了一下,程还是需要套一个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;
}

小甲鱼的铁粉 发表于 2020-7-8 08:30:24

1.楼主,switch其实并不是一个训环,你可以把它理解为比if更高级的判断语句,因为输出有5行,所以一定要用到循环语句,这里我们可以使用for(;i<=5;)来让他循环5次
2.修改后的代码,代码使用的是int main(),现在的编译器void main快淘汰了,容易报错
#include<stdio.h>
int main()
{
      int i;
      i=1;
      for(;i<=5;)
      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;
                }
                }
    return 0;
}
3.可以使用嵌套的for语句改进代码#include <stdio.h>
int main()
{
      int i,j=1;
      i = 1;
      for(;i<=5;i++)
      {
              for(j=1;j<=i;j++)
                      printf("*");
              printf("\n");
            }
      return 0;
}

巴巴鲁 发表于 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;
               }

风过无痕1989 发表于 2020-7-8 09:16:55

谢谢三位的解答! 要选择一个最佳答案,有点让我为难了。二楼的解答就是我的想法

风过无痕1989 发表于 2020-7-8 09:20:30

nanqi2333 发表于 2020-7-8 02:39
运行了一下,程还是需要套一个for,改成下面这样可以正常打印了
#include
int main()


谢谢你的解答! 我是初学,还没有学到 continue 语句

风过无痕1989 发表于 2020-7-8 09:23:17

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

谢谢你的解答! 老师上课时反复交代,要养成好习惯,哪怕只有一行代码,也用大括号,方便检查,也不易出错
页: [1]
查看完整版本: 为什么会出现错误?