You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言if语句逻辑错误:输入2时输出结果不符合预期

C语言程序逻辑错误排查:输入2时Tarif输出不符合预期

当输入数值2时,程序输出的tarif为2.060,但预期结果应为1.780。问题源于两处错误:变量类型与输入格式不匹配,以及if分支的逻辑条件错误。

问题代码片段

printf("Golongan Rumah Tangga A1\n");
printf("Masukan pemakaian \n");
scanf("%f", &pemakaian);

if ( pemakaian <= 10 ) {
    tarif = 1.780;
    printf("Tarif : %.3f\n", tarif);
}
else if ( pemakaian > 11 || pemakaian <= 20 ) {
    tarif = 2.060;
    printf("Tarif : %.3f\n", tarif);
}

错误原因分析

  1. 变量类型与scanf格式符不匹配
    你定义的pemakaian是int类型,但使用%f格式符读取输入。float与int的二进制存储格式完全不同,输入的2会被解析成一个无效的大整数,导致pemakaian <=10的条件不成立,进而进入错误分支。

  2. else if逻辑条件错误
    第二个分支的pemakaian >11 || pemakaian <=20是逻辑错误:||表示“或”,这个条件对几乎所有整数都成立(除了远大于20的数)。如果要表示“11到20之间(含20)”,应该用&&(逻辑与),或者利用第一个分支已经排除<=10的情况,直接简化为pemakaian <=20。

修正后的代码片段

// 修正变量类型为float,匹配scanf的%f;若使用int则将scanf改为%d
float pemakaian;
printf("Golongan Rumah Tangga A1\n");
printf("Masukan pemakaian \n");
scanf("%f", &pemakaian);

if ( pemakaian <= 10 ) {
    tarif = 1.780;
    printf("Tarif : %.3f\n", tarif);
}
else if ( pemakaian <= 20 ) {
    tarif = 2.060;
    printf("Tarif : %.3f\n", tarif);
}
else if ( pemakaian > 20 ) {
    tarif = 5.880;
    printf("Tarif : %.3f\n", tarif);
}

完整修正代码

#include <stdio.h>

int main() {

int klaster, golongan, listrik;
float pemakaian; // 修正变量类型为float,匹配%f格式符
double berm, tarif;

    printf("Program air\n");

    printf("Pilih klaster\n ");
    printf("1. Rumah Tangga\n");
    printf("2. Usaha\n");

    scanf("%d", &klaster);
    if (klaster == 1) {
        printf("pilih golongan\n");
        printf("1. Subsidi\n");
        printf("2. tanpa subsidi\n");
        scanf("%d", &golongan);
        if( golongan == 1) {
            printf("Masukan daya listik\n");
            scanf("%d", &listrik);

            printf("Masukan lebar berm\n");
            scanf("%lf", &berm); // double类型需用%lf格式符读取

            if (listrik == 450 && berm <=3.99 ) {
                printf("Golongan Rumah Tangga A1\n");
                printf("Masukan pemakaian \n");
                scanf("%f", &pemakaian);

                if ( pemakaian <=10 && pemakaian > 0 ) {
                    tarif = 1.780;
                    printf("Tarif : %.3f\n", tarif);
                }
                else if ( pemakaian <= 20 ) {
                        tarif = 2.060;
                        printf("Tarif : %.3f\n", tarif);
                }
                else {
                    tarif = 5.880;
                    printf("Tarif : %.3f\n", tarif);
                }
            } 
            else if (listrik == 900 && berm <=3.99 ) {
                printf("Golongan Rumah Tangga A1\n");
                printf("Masukan pemakaian \n");
                scanf("%f", &pemakaian);

                if ( pemakaian <= 10 ) {
                    tarif = 1.780;
                    printf("Tarif : %.3f\n", tarif);
                }
                else if ( pemakaian <= 20 ) {
                    tarif = 2.060;
                    printf("Tarif : %.3f\n", tarif);
                }
                else if ( pemakaian > 20 ) {
                    tarif = 5.880;
                    printf("Tarif : %.3f\n", tarif);
                }
            }
        }else {
            printf("Input yang benar woiii");
        }
    }else{
        printf("Input yang benar woiii");
    }
}

内容的提问来源于stack exchange,提问作者Esa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:25:26