我无法使枚举正常工作

时间:2011-08-10 15:18:50

标签: c++ c

enum ENU{YES=0,NO,DONTKNOW};

void func(ENU e)
{
   int n;
   cout<<"1+1=";
   cin >> n;
   if(n==2)
     cout<<e.YES;
   else 
     cout<<e.NO;
   if(ischar(n))   
     cout<<e.DONTKNOW;
}

始终显示错误。因为我的程序太小而且形成不好。

3 个答案:

答案 0 :(得分:5)

cout<<e.YES;
cout<<e.NO;

e是一个变量。当您执行e.YES时,您试图描述YESe的成员;这是not correct。我想你想要

cout<<YES;
cout<<NO;

答案 1 :(得分:3)

你使用枚举是错误的!你不能写e.YES,你必须以这种方式给变量'e'赋值YES:e = YES然后你可以显示它。 并且显示错误,cout会将其显示为int值,因此YES将显示为0,NO将显示为1.

答案 2 :(得分:1)

你可能想要这样的东西:

    enum ENU {YES=0,NO,DONTKNOW};
    void func()
    {
       int n;
       cout<<"1+1=";
       cin >> n;

       if(ischar(n))   
         cout<< DONTKNOW;
       else if(n==2)
         cout<< YES;
       else 
         cout<< NO;
    }

您的示例中没有必要将参数ENU传递给func()。 此外,您必须首先测试ischar(),以避免在没有必要的情况下进入其他两个测试中的任何一个。 请注意,使用“cout&lt;&lt; YES;”输出枚举值例如,不会向控制台写“YES”,而只会将其数字值写为“0”。

这个版本更好地证明了枚举的使用:

void func()
{
   int n;
   cout<<"1+1=";
   cin >> n;
   ENU e = YES;

   if(ischar(n))   
     e = DONTKNOW;
   else if(n==2)
     e = YES;
   else 
     e = NO;

    cout << e << endl;
}

备注:ischar()可能无法正常工作,因为您没有给它提供字符代码。