【问题标题】:What will be the possible output?可能的输出是什么?
【发布时间】:2016-02-11 07:17:11
【问题描述】:

我很久以前就开始编码,但以前从未有人问过这样的问题。

main()
{
    int a=5, b, c;
    b=a=15;
    c=a<15;
    printf("%d %d",a,c);
    }

a 和 c 的值是多少?我们如何解释''?

【问题讨论】:

  • 为什么不试试呢?
  • UBprintf() 范围内没有原型——任何事情都可能发生
  • 我试过了,它打印 c=0。为什么?
  • 因为,如果a是15,它不能小于15,你懂的.....
  • @Legionar:C 中的关系运算符产生01 类型为int

标签: c variable-assignment assignment-operator


【解决方案1】:

首先,这段代码的结果是未定义的,因为你没有为printf提供函数原型

其次,使用 main() 进一步未定义,因为函数需要返回类型,而 main() 特别需要是 int 返回类型(其他实现的处理是实现定义的。

现在假设您将代码更正为:

#include <stdio.h>
int main(void)
{
    int a=5, b, c;
    b=a=15;
    c=a<15;
    printf("%d %d",a,c);
    return 0;
    }

那么c 的输出是0

这是因为 &lt; 运算符根据比较是否为真返回 int 类型 01

【讨论】:

    【解决方案2】:

    &lt; 运算符产生 01 类型的 int

    如果它的左操作数小于它的右操作数,它产生1,否则产生0

    在您的情况下,左操作数的值为 a15;右操作数的值为15。所以运算符产生值0

    那么0就被分配给c

    带有额外空格、括号和注释的语句可以写成

    c = (a < 15); // assign 0 or 1 to c
    

    【讨论】:

      【解决方案3】:
      main()
      {
        int a=5, b, c;
        b=a=15;                  // a = 15
        c=a<15;                  // a is not < 15, a is 15, so c is 0
        printf("%d %d",a,c);
      }
      

      【讨论】:

        猜你喜欢
        • 2014-06-24
        • 1970-01-01
        • 2021-12-06
        • 2018-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-11
        相关资源
        最近更新 更多