题解 | #成绩输入输出#
成绩输入输出
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 )。