鱼C论坛

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

你知道吗?~

[复制链接]
发表于 2016-3-29 19:30:28 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
int main()
{
        enum color {red=0,yellow=1,blue=2,white=3,black=4};
        enum color i,j,k,pi;
        int l=0,h;
        for(i=red;i<=black;i++)
        {
                for(j=red;j<=black;j++)
                {
                        if(i!=j)
                        {
                                for(k=red;k<=black;k++)
                                {
                                        if(k!=i&&k!=j)
                                        {
                                                l=l+1;
                                                printf("%-4d",l);
                                                for(h=0;h<3;h++)
                                                {
                                                        switch(h)
                                                        {
                                                                case(0):pi=i;break;
                                                                case(1):pi=j;break;
                                                                case(2):pi=k;break;
                                                                default:break;
                                                        }
                                                        switch(pi)
                                                        {
                                                                case(red):printf("%-10s","red");break;
                                                                case(yellow):printf("%-10s","yellow");break;
                                                                case(blue):printf("%-10s","blue");break;
                                                                case(white):printf("%-10s","white");break;
                                                                case(black):printf("%-10s","black");break;
                                                                default:break;
                                                        }       
                                                }
                                                printf("\n");
                                        }
                                }
                        }
                }
        }
        printf("\ntotal:%-4d",l);
}
口袋中有红 黄 蓝白黑五种颜色的区域若干个,每次从口袋中先后去除三个球,问得到三种不同颜色的球的可能取法,输出每种排列的情况。。。。
编译时出现
E:\CCCCCCCCC\cao.cpp        In function 'int main()':
7        22        E:\CCCCCCCCC\cao.cpp        [Error] no 'operator++(int)' declared for postfix '++' [-fpermissive]
9        23        E:\CCCCCCCCC\cao.cpp        [Error] no 'operator++(int)' declared for postfix '++' [-fpermissive]
13        25        E:\CCCCCCCCC\cao.cpp        [Error] no 'operator++(int)' declared for postfix '++' [-fpermissive]
哪个大神知道什么原因?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-29 20:03:03 | 显示全部楼层
++不支持这样的类型递增 只支持int DWORD WORD long 啥的
CPP的运算符重载能解决这个问题,或者用结构体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-18 22:29:38 | 显示全部楼层
只需将i++,j++,k++都改为i=Color(i+1),j=Color(j+1),k=Color(k+1)就行
口袋中有红、黄、蓝、白、黑5种颜色球若干个。每次从口袋先后取出3个球,问得到3种颜色不同的球的可能 ,输出每种排列的情况。
#include<stdio.h>
enum Color {red,yellow,blue,white,black};
int main()
{
        enum Color i,j,k,pri;
        int n,loop;
        n=0;
        for(i=red;i<=black;i=Color(i+1))//不能用i++,会报错
        for(j=red;j<=black;j=Color(j+1))
        if(i!=j)
        {
                for(k=red;k<=black;k=Color(k+1))
                if((k!=i)&&(k!=j)){
                        n=n+1;
                        printf("%-4d",n);
                        for(loop=1;loop<=3;loop++)
                        {
                                switch(loop)
                                {
                                        case 1:pri=i;break;
                                        case 2:pri=j;break;
                                        case 3:pri=k;break;
                                        default :break;
                                }                       
                        switch(pri)
                                {
                                        case red:printf("%-10s","red");break;
                        case yellow:printf("%-10s","yellow");break;
                                        case blue:printf("%-10s","blue");break;
                                        case white:printf("%-10s","white");break;
                                        case black:printf("%-10s","black");break;
                                        default :break;                       
                                }       
                        }
                        printf("\n");
                }
        }
        printf("\ntotal:%5d\n",n);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-19 00:50:18 | 显示全部楼层
对于这个color类型的++来说,enum本身不支持++运算符,如果说非要支持,那么要么把他转成int类型,或者重载++运算符,转成int应该不用说了,下面提供了一种重载++运算符的做法

  1. #include<stdio.h>

  2. enum color
  3. {
  4.     red = 0, yellow = 1, blue = 2, white = 3, black = 4
  5. };

  6. color operator++(color c, int)
  7. {
  8.     return (color)(c + 1);
  9. }

  10. int main()
  11. {
  12.     enum color i, j, k, pi;
  13.     int l = 0, h;
  14.     for (i = red; i <= black; i++)
  15.     {
  16.         for (j = red; j <= black; j++)
  17.         {
  18.             if (i != j)
  19.             {
  20.                 for (k = red; k <= black; k++)
  21.                 {
  22.                     if (k != i&&k != j)
  23.                     {
  24.                         l = l + 1;
  25.                         printf("%-4d", l);
  26.                         for (h = 0; h < 3; h++)
  27.                         {
  28.                             switch (h)
  29.                             {
  30.                             case(0) : pi = i; break;
  31.                             case(1) : pi = j; break;
  32.                             case(2) : pi = k; break;
  33.                             default:break;
  34.                             }
  35.                             switch (pi)
  36.                             {
  37.                             case(red) : printf("%-10s", "red"); break;
  38.                             case(yellow) : printf("%-10s", "yellow"); break;
  39.                             case(blue) : printf("%-10s", "blue"); break;
  40.                             case(white) : printf("%-10s", "white"); break;
  41.                             case(black) : printf("%-10s", "black"); break;
  42.                             default:break;
  43.                             }
  44.                         }
  45.                         printf("\n");
  46.                     }
  47.                 }
  48.             }
  49.         }
  50.     }
  51.     printf("\ntotal:%-4d", l);
  52.     return 0;
  53. }
复制代码


另外说一点,这个int main(),虽然没返回值也能编译通过,这是因为编译器对main函数特殊处理了,但是最好养成好习惯,加上return
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 02:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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