“?”之后的多条指令操作者

时间:2016-03-19 16:45:31

标签: c++

我必须做一个分数struct,已经有nominatordenominator以及is_correct()函数,它会检查两个必要条件。但现在我必须制作一个shorten()函数,这将使我的分数不可简化。

我做了一个gcd()函数(最大公约数),我需要在我的结构中放一个shorten()函数。它看起来像这样:

struct fraction {
                int n,d;
                bool is_correct(){return d!=0?(abs(n)<abs(d)?true:false):false;};
                void shorten(){gcd(n,d)!=1?(n=n/gcd(n,d);d=d/gcd(n,d)):;};
                }; 

int gcd(int x, int y)
{
    int z;
    while (y!=0){z=x%y;x=y;y=z;}
    return x;
} 

因此,如果gcd()未返回1值,那么我想将n除以此值,并将d除以此值。

当我试图让它在“;”之前给我预期的“:”许多地方的令牌。我做错了什么?

2 个答案:

答案 0 :(得分:3)

您没有向:运算符的?:部分提供表达式。您应该使用if语句而不是三元运算符,如下所示:

int g = gcd(n, d);
if (g != 1)
{
    n = n / g;
    d = d / g;
}

答案 1 :(得分:0)

通过正确格式化代码,您会发现错误:

void shorten(){gcd(n,d)!=1?(n=n/gcd(n,d);d=d/gcd(n,d)):;};

void shorten() { gcd(n, d) != 1 ? (n = n / gcd(n, d) ; d = d / gcd (n , d)):; };
                                                   ^^^^^^                     ^^
                                             missing                     colon should be  
                                             paranthesis/                in between the 
                                             semicolon doesn't           statements
                                             belong here 

所以你会把它写成:

void shorten() { gcd(n, d) != 1 ? (n /= gcd(n, d)) : (d /= gcd(n, d)); }

甚至更好

void shorten()
{
    if (gcd(n, d) != 1)
        n /= gcd(n, d);
    else
        d /= gcd(n, d);
}