#if elif指令无法正常工作

时间:2016-04-25 05:50:37

标签: c++

我正在尝试使用if ifif来测试一个条件,但我没有得到预期的结果。请帮我确定一下我做错了什么?

#include <iostream>
using namespace std;
#define a(t1)(t1+50)
#define b(t2)(t2+100)
int main()
{
    union gm
    {
        int t1;
        int t2;
    };
    gm c;

    cout <<"Enter tokens earned in game 1: "<<endl;
    cin>>c.t1;
    int x=c.t1;
    cout <<"Enter tokens earned in game 2: "<<endl;
    cin>>c.t2;
    int y=c.t2;
    int m= a(x)+100;
    int n= b(y)+50;
    int p;
    p=m+n;
    cout <<p<<endl;

#if(p<500)
    cout <<"Points earned too less"<<endl;
#elif (p>500 && p<1500)
    cout<<"You can play game 1 free"<<endl;
#elif (p>1500 && p<2500)
    cout<<"You can play game 1 free"<<endl;
#elif p>3000
    cout<<"You can play game 1 and game free"<<endl;
#endif
    return 0;
}

当P的值超过500时,仍显示“积分太少”的消息。

请帮忙。

1 个答案:

答案 0 :(得分:4)

在运行时,不能使用依赖于变量值的预处理器宏。

除非将p定义为预处理器宏,否则

#if(p<500)

翻译为:

#if(0<500)

由于这是真的,只有那段代码被编译成目标代码。这解释了你所看到的行为。

您需要使用C ++的if-else语句,而不是预处理器。

if (p<500)
{
   cout <<"Points earned too less"<<endl;
}
else if (p>500 && p<1500)
{
   cout<<"You can play game 1 free"<<endl;
}
else if (p>1500 && p<2500)
{
   cout<<"You can play game 1 free"<<endl;
}
else if ( p>3000 )
{
   cout<<"You can play game 1 and game free"<<endl;
}
else
{
   // Do something for everything else.
}