该计划的o / p是多少;怎么回事

时间:2010-10-07 11:25:24

标签: c printf

  

可能重复:
  Confusion about the output..

#include<stdio.h>
void main()
{
  int i=1,j=-1;
  if(printf("%d",i)<printf("%d",j))
    printf("%d",i);
  else
    printf("%d",j);
}

这个程序在这里是什么输出&amp;怎么样?

4 个答案:

答案 0 :(得分:0)

printf返回写入的字符总数。 “-1”长于“1”。所以......

答案 1 :(得分:0)

该程序调用未定义的行为,因为main必须至少定义为int main(),并且必须返回intexit。特别是输出可能不会被刷新,因此是空的。

假设出现完整输出,则确切输出未定义,因为<的操作数可以按任意顺序进行评估。其余的看起来微不足道。

答案 2 :(得分:0)

答案是&lt;&lt;&lt; 1 -1 1&gt;&gt;&gt;。因为printf语句返回int值,即在屏幕上成功写入的字符数{在if条件下,第一个printf返回1,第二个printf返回2}。因此,如果条件变为1&lt;这种情况是真的。所以,执行true block。

答案 3 :(得分:0)

需要评估if语句以获取分支。为此,两个printf调用(在if语句中生成)将以任一顺序执行。这将导致1和-1在o / p缓冲区中打印,但不保证首先打印哪个数据。 现在,一旦if条件的值已知(false),将执行else分支内的printf调用。它将在缓冲区中打印1。最后作为退出处理程序的一部分,将刷新o / p缓冲区。这将导致在stdout上打印1-11或-111。