该代码将为我提供空白输出,该代码的输出将是什么,这怎么可能成立呢?

时间:2019-06-06 21:10:29

标签: c if-statement

由于在我的代码ab中不等于0,因此答案必须为Bye。但是我收到的输出是什么。请帮忙!

#include <stdio.h>

main() {
    int a = 1, b = 1;
    if (a == 0)
        if (b == 0) {
            printf("HI");
        } else {
            printf("Bye");
        }
}

3 个答案:

答案 0 :(得分:0)

  

由于在我的代码中a和b不等于0,因此答案必须是Bye

如果到达包含printf("Bye");行的代码路径的正确排列是(a != 0) && (b != 0),那将是正确的。您当前的代码包含if(a == 0) if(b == 0)。为了到达包含行printf("Bye")的代码路径,您需要同时使ab都等于零。

解决方案:用包含正确条件的单个if语句替换if语句混乱。

答案 1 :(得分:0)

因为

#include <stdio.h>

main() {
    int a = 1, b = 1;
    if (a == 0)
        if (b == 0) {
            printf("HI");
        } else {
            printf("Bye");
        }
}

完全相同
#include <stdio.h>

main() {
    int a = 1, b = 1;
    if (a == 0) {
        if (b == 0) {
            printf("HI");
        } else {
            printf("Bye");
        }
    }
}

请注意为if (a == 0) if语句添加了一组花括号,以及如何在这些花括号中包含printf("Bye");

因此,除非printf("Bye");为零并且a为非零,否则b不会被调用。

答案 2 :(得分:0)

您的代码不会打印任何内容,因为第一个测试的结果为false,因此将跳过其余代码。

请注意,您的编程风格存在一些问题:

    从C99版本开始,
  • 省略返回类型不再是C标准所宽容的。定义问题中发布的main曾经在c89和以前的版本中起作用,但是今天只能使用宽松的编译器设置进行编译(可悲的是,今天仍然是默认的编译器设置)。

  • 尽管第一个if语句只命令了一个语句,但是您应该使用花括号,因为该语句很简单,而且跨越多行。

  • 建议从return 0;显式地main,而不要忽略return语句。 C99将此设置为可选,但并非所有可选项都应省略(例如适当的间距:)。

  • 为了更好地移植到某些旧系统,最好始终在输出末尾添加换行符。

这是经过改进的版本,带有经过修改的测试,可以打印出Bye

#include <stdio.h>

int main() {
    int a = 1, b = 1;
    if (a == 0 || b == 0) {
        printf("HI\n");
    } else {
        printf("Bye\n");
    }
    return 0;
}