【发布时间】:2013-06-27 09:07:42
【问题描述】:
我在使用 C 中的嵌套条件运算符时遇到了一点麻烦。
int is_correct() {
char YN ;
printf( "Y or N : " ) ;
scanf( "%c", &YN ) ;
YN = toupper( YN ) ;
return ( YN == 'Y' )? 1 : ( YN == 'N' )? 0 : is_correct() ;
}
我的印象是,如果输入了“Y”或“N”,最后一行代码将返回 1 或 0,如果输入了意外字符,则会再次调用自身。相反,无论输入如何,它都会不断地调用自己。
【问题讨论】:
-
这可能不是问题,但我会在多条件中使用括号:
return (YN == 'Y') ? 1 : ((YN == 'N') ? 0 : is_correct()) ; -
你为什么要编写愚蠢的代码并期望得到一个非愚蠢的答案?
-
@Mat:不,不是。只要条件包含在
()中,就像在 OP 的情况下一样,在解析这些条件运算符时就没有任何歧义。额外的()完全没有必要。对于某些人来说,它们可能会提高可读性,而对于某些人来说,它们实际上可能会使情况变得更糟。事实上,()周围的条件也是不必要的,但它们确实有助于阅读代码。至于额外的()...不,OP的版本非常好。 -
@Ed S:没必要,当然。但它使阅读更容易。
(void)是表示 C 中没有参数的正确方法,而不是() -
@camelccc:如果
YN是signed char,那么对toupper()的调用会调用UB。
标签: c