while(*p!='\0' && *q!='\0')
{
if(*p==*q)
{
p++;
q++;
c++;
}
else
break;
}
我已经写了这个使用三元运算符,但为什么它给错误语句的错误?为什么break不能和三元运算符一起使用?
*p==*q?p++,q++,c++:break;
gcc编译器给出了这样的错误:“休息”
while(*p!='\0' && *q!='\0')
{
if(*p==*q)
{
p++;
q++;
c++;
}
else
break;
}
我已经写了这个使用三元运算符,但为什么它给错误语句的错误?为什么break不能和三元运算符一起使用?
*p==*q?p++,q++,c++:break;
gcc编译器给出了这样的错误:“休息”
之前预期的表现当您使用三元运算符,它不像一个if
。三元运算符具有以下形式:
(condition ? expression_if_true : expression_if_false);
这两个表达式必须具有相同的类型,否则,使无义。
而且如Thilo所说,你不能在这个运算符中使用语句,只能表达式。这是因为根据条件,整个三元运算符必须是一个表达式。
和'休息'根本不是一个表达。 – Thilo
的语法是:
(condition ? expr_true : expr_false);
expr_true和expr_false必须有共同的类型(这将是三元运算的结果)。 另外,当然,break
不是一个表达式,它是一个声明。
因为'break;'是一个语句,而不是表达式。 – MikeCAT
虽然指针运算通常很好,并且是其他语言所具有的C特性之一,但它并不总是最好的解决方案。如果重新组织循环以使用'size_t i'作为迭代器,则代码会更好,而不会在任何合理的体系结构上丢失性能。 – EOF
[为什么我不能在C++的三元条件语句中使用“break”语句?](http://stackoverflow.com/questions/28642693/why-cant-i-use-a-break- statement-in-a-ternary-conditional-statement-in-c) – Twahanz