由于在我的代码a
和b
中不等于0
,因此答案必须为Bye
。但是我收到的输出是什么。请帮忙!
#include <stdio.h>
main() {
int a = 1, b = 1;
if (a == 0)
if (b == 0) {
printf("HI");
} else {
printf("Bye");
}
}
答案 0 :(得分:0)
由于在我的代码中a和b不等于0,因此答案必须是Bye
如果到达包含printf("Bye");
行的代码路径的正确排列是(a != 0) && (b != 0)
,那将是正确的。您当前的代码包含if(a == 0) if(b == 0)
。为了到达包含行printf("Bye")
的代码路径,您需要同时使a
和b
都等于零。
解决方案:用包含正确条件的单个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,因此将跳过其余代码。
请注意,您的编程风格存在一些问题:
省略返回类型不再是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;
}