输入的值与输出等级不匹配,因为即使不满足10的条件,它也会给出10等级。 问题是进入硬度50强度5600和碳0.7给予10级,而10级碳应该小于0.7? #包括 #包括 #include
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;
}
答案 0 :(得分:3)
在"%.2f"
中使用scanf
作为格式说明符不正确。它适用于printf
但不适用scanf
。
始终检查scanf
的返回值以确保该函数能够读取预期数据是个好主意。
if ( scanf("%.2f", &carbon) != 1 )
{
// Deal with error.
}
向其他scanf
来电添加类似的检查。
我认为将上述格式说明符更改为"%f"
可以解决您的问题。加上支票。
if ( scanf("%f", &carbon) != 1 )
{
// Deal with error.
}
答案 1 :(得分:0)
问题在于scanf语句中的格式说明符(.2f)。 %.2f通常用于在点之后打印2位数 在C中,所有浮点文字都存储为双精度值。因此我们需要指定我们使用float,即通过f附加值来使用单精度。检查代码的更改 如果你想要将碳量四舍五入到2位数精度,你可以使用碳= ceilf(碳* 100)/100.0; 当您下次发布问题时,发布失败的输入,您将得到快速回复 你可以用较少的比较来写这个 - 这是工作代码
#include<stdio.h>
int main(void) {
int hardness;
int strength;
float carbon;
printf("Enter the hardness of steel:");
scanf("%d", &hardness);
printf("Enter the tensile strength:");
scanf("%d", &strength);
printf("Enter carbon content:");
scanf("%f", &carbon);
if ((hardness >= 50) && (carbon < 0.7f) && (strength >= 5600))
printf("\ngrade = 10");
else if ((hardness >= 50) && (carbon < 0.7f))
printf("\ngrade = 9");
else if ((carbon < 0.7f) && (strength >= 5600))
printf("\ngrade = 8");
else if ((hardness >= 50) && (strength >= 5600))
printf("\ngrade = 7");
else if ((hardness >= 50) || (carbon > 0.7f) || (strength <= 5600))
printf("\ngrade = 6");
else
printf("\ngrade = 5");
_getch();
return 0;
}