我必须做一个分数struct
,已经有nominator
和denominator
以及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
除以此值。
当我试图让它在“;”之前给我预期的“:”许多地方的令牌。我做错了什么?
答案 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);
}