【发布时间】:2015-10-10 04:40:09
【问题描述】:
输入的值与输出等级不匹配,因为即使不满足 10 的条件,它也会给出 10 等级。 问题是,在进入硬度 50 强度 5600 和碳 0.7 时,其给出等级 10 而对于等级 10,碳应该小于 0.7? #包括 #包括 #包括
int main() {
// program grade the steel on quality basis
int hardness;
int strength;
float carbon;
printf("Enter the hardness of steel:"); // condition 1 hardness should be >= 50
scanf("%d", &hardness);
printf("Enter the tensile strength:"); // condition 2 strength should be >= 5600
scanf("%d", &strength);
printf("Enter carbon content:"); // condition 3 carbon less than 0.7
scanf("%.2f", &carbon);
if ((hardness >= 50) && (carbon < 0.7) && (strength >= 5600)) { // all true
printf("\ngrade = 10");
}
else if ((hardness >= 50) && (carbon < 0.7) && (strength <= 5600)) { // 1 and 2 true
printf("\ngrade = 9");
}
else if ((hardness <= 50) && (carbon < 0.7) && (strength >= 5600)) { // 2 and 3 true
printf("\ngrade = 8");
}
else if ((hardness >= 50) && (carbon > 0.7) && (strength >= 5600)) { // 1 and 3 true
printf("\ngrade = 7");
}
else if ((hardness >= 50) && (carbon > 0.7) && (strength <= 5600)) { // any one true
printf("\ngrade = 6");
}
else if ((hardness <= 50) && (carbon < 0.7) && (strength <= 5600)) { // any one true
printf("\ngrade = 6");
}
else if ((hardness <= 50) && (carbon < 0.7) && (strength >= 5600)) { // any one true
printf("\ngrade = 6");
}
else {
printf("\ngrade = 5"); // none true
}
_getch();
return 0;
}
【问题讨论】:
-
case适合这个... -
将
scanf("%.2f", &carbon);更改为scanf("%f", &carbon); -
您可能会注意到,如果碳含量正好是 0.7(这是否真的是一个微妙的问题 - 可能不是因为
carbon是float而0.7是 @ 987654328@),那么你永远不会匹配这个值。
标签: c if-statement case