中的嵌套条件运算符

中的嵌套条件运算符

This question already has answers here:
scanf not taking in data

(3 个回答)


7年前关闭。




我在使用 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,或者如果输入了意外字符则再次调用自身。相反,无论输入如何,它都会不断地调用自己。

最佳答案

可能是扫描失败了,而您没有对其进行验证。

您没有指定“连续”是否意味着“无需停止阅读更多输入”,这当然应该这样做。

请注意,例如, toupper() 使用 int 类型的参数和结果,并且期望 unsigned char 类型的值可能会在那里遇到未定义的行为。

这是 ctype.h 函数的一个非常令人困惑的方面。如果数据来自文本( unsigned char )缓冲区,我倾向于在调用中转换为 char

添加 printf() 调用以在最后一行之前打印出 YN 的值。

关于c - C 中的嵌套条件运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17384246/

10-09 15:53