为什么输出的全是“成绩为优”

来源:5-1 板刀面还是馄炖?if 语句

qq_慕的地2560883

2023-11-28 22:27

#include<stdio.h>

#include<iostream>

int main() {

int a;

std::cin >> a;

if (90 <= a <=100) {

printf("成绩为优!");

}

else if (75<= a <90) {

printf("成绩为良!");

}

else if (60<= a < 75) {

printf("成绩为中!");

}

else if(0 <= a <60) {

printf("成绩为差!");

}

return 0;

}



写回答 关注

1回答

  • 永恒丿丶之火
    2024-01-07 23:22:37

    因为慕课网这个运行程序没有终端,也就是说程序在执行到 std::cin >> a; 这句代码的时候没办法获取输入,所以变量 a 应该没有被赋值,也就是说它的值是个随机值,可以把它的值打印出来:
    https://img1.sycdn.imooc.com/659abf520001483a21941220.jpg
    可以看到变量 a 的值是 21990,是大于 90 的,另外“输出的全是优”这个问题的关键在于:
    在 C++ 中,部分数学判断表达式是不能直接写的,不符合程序语法,例如:

    90 <= a <= 100 就是个错误的写法,正确的写法是:a >= 90 && a <= 100 。
    你的 “90 <= a <= 100 ”的写法其实相当于一个表达式,即:(90 <= a) <= 100。程序执行时候是从左向右读取和执行的,所以先会读取 90 <= a 的结果,因为 a = 21990 是 >= 90 的,所以 (90 <= a) 的值就是 1,而 1 <= 100 又是 true,所以最终的结果是 1,因为条件为真,所以会执行到这个分支。
    同时,由于 if-else 分支的语法特性,只会执行一个分支,所以在 if 条件为真的时候,只会执行 if 分支,其他的 else if 和 else 分支就不会执行了,所以导致了 “输出的全是优”。
    可以自己打印下这个结果看下:
    https://img1.sycdn.imooc.com/659ac1bb0001771121780856.jpg

趣味 C++ 入门

C++ 入门,开启趣味学习之旅,揭开 C++ 的神秘面纱,让你不再望而生畏。

31573 学习 · 191 问题

查看课程

相似问题