题解 | #成绩输入输出#

成绩输入输出

https://www.nowcoder.com/practice/eb49750ef0de47168c21761de086d97c

#include <stdio.h>

int main() {
    float a,b,c;
	  while(1){ 
        scanf("%f %f %f",&a,&b,&c);
        if(a < 0 || a > 100 || b < 0 || b > 100 || c < 0 || c > 100 ){
            printf("输入的值超出0~100的范围,请重新输入\n");   //当输入不合法时提醒重新输入
        }else{
            break;  //输入合法则跳出while循环
        }
      }
    int score1=(int)a;
    int score2=(int)b;
    int score3=(int)c;
    printf("score1=%d,score2=%d,score3=%d\n",score1,score2,score3);

    return 0;
}

因为题目没有要求用四舍五入,所以将a,b,c 强制转换成整形数值,89.8=89,这里需要注意的是转换后的数值需要用一个新的变量去保存这个值,像int a=(int)a,这种写法是错误的,因为a在前面已经定义过了。只能用新的变量去存储。

当然这道题如果用%.0f去输出也是可以通过的,不过这时就四舍五入了。89.8=90。

if(0>(a || b ||c)>100){  //判断如果输入的值不在0~100的区间就报错退出
    printf("输入的值超出0~100的范围,请重新输入");
  return -1;
}

0>(a || b || c)>100 并不是一个有效的表达式。在C语言中,逻辑运算符 || 用于判断逻辑或关系,它返回两个操作数中任意一个为真时的结果。因此,(a || b || c) 的结果将是一个布尔值(0或1),而不是一个数值。

接着,将布尔值与0和100进行比较是没有意义的,因为布尔值只能是0或1。所以,0>(a || b || c)>100 是一个语法错误,并不能实现你想要的功能。应该改为(a < 0 || a > 100 || b < 0 || b > 100 || c < 0 || c > 100 )。

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务