I'm new to C Programming. Im really confused why printf gives undefined behavior output. I tried to double-check every command and I don't think there is a mistake with my current knowledge. What was wrong with my code?
struct Barang
{
int Kode;
int Jumlah;
int HargaSatuan;
float Total;
char Nama[20];
}Brg[10];
int i,j,harga=0,banyak;
float rata=0;
printf("Berapa banyak barang? : ");
scanf("%d",&banyak);
for (i=0;i<banyak;i++)
{
printf("\nBarang Ke-%d\n",i+1);
printf("Masukkan Kode : ");
scanf("%d",&Brg[i].Kode);
fflush(stdin);
printf("Masukkan Nama Barang : ");
fgets(Brg[i].Nama,20,stdin);
strtok(Brg[i].Nama, "\n" );
printf("Masukkan Harga Satuan : ");
scanf("%d",&Brg[i].HargaSatuan);
printf("Ada Berapa Jumlah? : ");
scanf("%d",&Brg[i].Jumlah);
harga+=Brg[i].HargaSatuan;
}
for (i=0;i<banyak;i++)
{
printf("\nBarang Ke-%d\n",i+1);
printf("Kode : %d\n",Brg[i].Kode);
printf("Nama Barang : %s\n",Brg[i].Nama);
printf("Harga Satuan : %d\n",Brg[i].HargaSatuan);
printf("Jumlah : %d\n",Brg[i].Jumlah);
}
j=i;
Brg[i].Total=(float)(Brg[i].HargaSatuan*Brg[i].Jumlah);
rata=(float)Brg[i].Total/j;
printf("\nTotal Harga Semua Barang : %.2f\n",Brg[i].Total);
printf("Rata-Rata Harga Barang : %.2f\n",rata);
If I run it
Berapa banyak barang? : 2
Barang Ke-1
Masukkan Kode : 20
Masukkan Nama Barang : Tes A
Masukkan Harga Satuan : 20
Ada Berapa Jumlah? : 1
Barang Ke-2
Masukkan Kode : 10
Masukkan Nama Barang : Tes B
Masukkan Harga Satuan : 30
Ada Berapa Jumlah? : 2
Barang Ke-1
Kode : 20
Nama Barang : Tes A
Harga Satuan : 20
Jumlah : 1
Barang Ke-2
Kode : 10
Nama Barang : Tes B
Harga Satuan : 30
Jumlah : 2
Total Harga Semua Barang : 2093416448.00
Rata-Rata Harga Barang : 1046708224.00
Process returned 0 (0x0) execution time : 21.303 s
Press any key to continue.
It give me very wrong output and unexpected. The right output should be like this:
Berapa banyak barang? : 2
Barang Ke-1
Masukkan Kode : 20
Masukkan Nama Barang : Tes A
Masukkan Harga Satuan : 20
Ada Berapa Jumlah? : 1
Barang Ke-2
Masukkan Kode : 10
Masukkan Nama Barang : Tes B
Masukkan Harga Satuan : 30
Ada Berapa Jumlah? : 2
Barang Ke-1
Kode : 20
Nama Barang : Tes A
Harga Satuan : 20
Jumlah : 1
Barang Ke-2
Kode : 10
Nama Barang : Tes B
Harga Satuan : 30
Jumlah : 2
Total Harga Semua Barang : 70
Rata-Rata Harga Barang : 23.3
Process returned 0 (0x0) execution time : 21.303 s
Press any key to continue.
How do I solve this? Thank you.
stdin
) tofflush
is explicitly mentioned in the C specification as leading to undefined behavior. Any literature, tutorial or class that teaches it should be looked at with great suspicion.scanf("%d")
will produce undefined behavior if the input stream contains a value that cannot be represented in an int (eg INT_MAX + 1)