if else声明没有给出预期答案

时间:2015-10-10 04:40:09

标签: c if-statement case

输入的值与输出等级不匹配,因为即使不满足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;
}

2 个答案:

答案 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;
}