首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Printf在C中使用Struct时给出了一个未定义的行为

Printf在C中使用Struct时给出了一个未定义的行为
EN

Stack Overflow用户
提问于 2022-03-09 17:02:21
回答 2查看 59关注 0票数 0

我对C编程很陌生。我真的不明白为什么printf会给出未定义的行为输出。我试着反复检查每一个命令,我不认为我目前的知识有错。我的密码怎么了?

代码语言:javascript
复制
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);

如果我运行它

代码语言:javascript
复制
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.

它给了我非常错误的输出和意想不到的结果。正确的输出应该如下所示:

代码语言:javascript
复制
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.

我该怎么解决这个问题?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2022-03-09 17:07:21

当你做的时候

代码语言:javascript
复制
Brg[i].Total=(float)(Brg[i].HargaSatuan*Brg[i].Jumlah);
rata=(float)Brg[i].Total/j;

您在循环之外,这意味着i将是一个超出初始化数据范围的索引。

对于数组中有两个条目的输入,有效的索引将是01。循环后的i值将是2

您需要在循环中修改一个单独的total变量。

票数 2
EN

Stack Overflow用户

发布于 2022-03-09 17:29:27

循环中有一个错误:

代码语言:javascript
复制
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);

当循环完成后,i = banyak,但是Brg[i]的值只为i定义,直到banyak - 1。我想你的意思是:

代码语言:javascript
复制
float total = 0;
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);
    Brg[i].Total = (float)(Brg[i].HargaSatuan * Brg[i].Jumlah);
    total += Brg[i].total;
}
rata = total / banyak;
printf("\nTotal Harga Semua Barang : %.2f\n",total);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71413227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档