【问题标题】:Ternary operators in C, wrong outputC中的三元运算符,错误的输出
【发布时间】:2022-01-16 20:14:06
【问题描述】:

我有下面的代码要求识别任何错误:

main( )
{
int kk = 65 ,ll ;
ll = ( kk == 65 : printf ( "\n kk is equal to 65" ) : printf ( "\n kk is not equal to 65" ) ) ;
printf( "%d", ll ) ;
}

我已将其更正如下:

int main( )
{
int kk = 65, ll ;
ll = kk == 65 ? printf ( "\n kk is equal to 65" ) : printf ( "\n kk is not equal to 65" );
printf( "%d", ll ) ;
}

我希望输出是 kk 等于 65,但是,我得到 'kk 等于 6519'

任何人都可以看看这个并帮我看看这个原因吗?

非常感谢,

克里斯 G

【问题讨论】:

  • printf( "%d", ll ) ; 您希望打印什么,您是否将其考虑到您期望的输出中?建议在每个printf 字符串的末尾添加一个\n,以使输出更清晰。
  • 在使用printf 打印时,始终养成使用trailing 换行符的习惯。它不仅可以帮助您理解这里的问题,而且还可以在其他地方帮助您,因为当stdout(这是printf 写入的流)连接到终端或控制台时,它将是 行缓冲。这意味着缓冲的输出将实际写入换行符。使用前导换行符打印 previous 行,使用尾随打印 current 行。

标签: c operators conditional-operator


【解决方案1】:

printf() 函数返回打印到stdout 的字符数。因此,将值 19 分配给变量 ll。表达式"\n kk is equal to 65" 打印在屏幕上,后面是变量ll 的值。

#include <stdio.h>

int main( )
{
    int kk = 65, ll;
    ll = (kk == 65) ? printf( "\n kk is equal to 65" ) : printf ( "\n kk is not equal to 65" );
    
    printf("\nll: %d", ll);
    printf("\nNumber of character: %d", printf( "\n kk is equal to 65" ));

    return 0;
}

此程序生成以下输出:

 kk is equal to 65
ll: 19
 kk is equal to 65
Number of character: 19

【讨论】:

    【解决方案2】:

    " kk is not equal to 65" 部分来自printf("\n kk is equal to 65")"19" 来自前面提到的printf 的结果,它返回19 作为printf 为字符串"\n kk is equal to 65" 写入的字符数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 2014-12-14
      • 2013-06-24
      • 2014-05-03
      • 2011-12-18
      • 2017-05-15
      • 2011-02-15
      • 2021-10-25
      相关资源
      最近更新 更多