题解 | #成绩输入输出#

成绩输入输出

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 )。

全部评论

相关推荐

07-11 15:12
门头沟学院 Java
别人在上班,我就在工位上看看视频啥的,这正常吗?
程序员小白条:实习就是摸鱼,只是公司指标,把你进来了,可能那时候客户很多,但等你进来的时候,已经是淡季了,根本没多少需求,或者说根本不适合实习生去完成,因此你就每天干坐着就行,可能1,2个月都没需求
实习生的蛐蛐区
点赞 评论 收藏
分享
点赞 评论 收藏
分享
仁者伍敌:实习生要工作经验,工作要实习经验
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务