Esa
Esa

Reputation: 11

if statement in c not output correctly

    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);
    }

when I input 2 the result is still 2,060

which should be 1,780

this is my full code

#include <stdio.h>

int main() {

int klaster, golongan, listrik, pemakaian;
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("%f", &berm);

            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 > 11 ) {
                        tarif = 2.060;
                        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 > 11 || 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");
        
    }
}

Upvotes: 0

Views: 64

Answers (1)

Dorin Botan
Dorin Botan

Reputation: 1388

When reading a float with scanf("%f", &pemakaian) (notice the %f flag), a binary value of 0b01000000000000000000000000000000 is read for a decimal input 2, which later is stored in an int variable pemakaian as a 4194304 decimal.

You can find out more about the binary format of the float numbers in C here.

The easiest solution for this is to either read an integer with scanf("%d", &pemakaian) (notice the %d flag), or initialize pemakaian as a float.

Upvotes: 1

Related Questions