为什么不按照记录显示输出?

时间:2016-12-28 22:33:42

标签: c algorithm

我想用C语言制作收银员计划。我使用一个结构进行记录,但是当我为条形码输入输入1时,它不显示第1项;相反,它显示第2项。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

struct item
{
    char name[10];
    int price;
    int barcode;
};
struct item detail[10] = {
        "item1", 10, 1,
        "item2", 20, 2,
        "item3", 30, 3,
        "item4", 40, 4,
        "item1", 50, 5,
        "item2", 60, 6,
        "item3", 70, 7,
        "item4", 80, 8,
        "item3", 90, 9,
        "item4", 100, 10
};
int main()
{
    int ibarcode[10];
    int qty[10];
    int tot[10];
    int j, i, k, grand;
    char a;
    printf("Program Kasir\n");
    for (j = 0; j < 10; j++)
    {
        printf("ebter barcode : ");
        scanf("%d", &ibarcode[j]);
        for (i = 0; i < 10; i++)
        {
            if (ibarcode[j] == detail[i].barcode)
            {
                printf("item : %s\n", detail[i].name);
                printf("price : %d\n", detail[i].price);
                printf("enter quantity : ");
                scanf("%d", &qty[j]);
                tot[j] = detail[j].price * qty[j];
            }
            if (ibarcode[j] > 10)
            {
                printf("Barcode isn't valid'\n");
                j--;
                break;
            }
        }
        printf("\nbuy again? [Y/N] = ");
        scanf("%s", &a);
        if (a == 'Y' || a == 'y')
        {
            continue;
        } else
        {
            break;
        }
    }
    grand = 0;
    system("cls");
    printf("\n name Kasir = Addzifi Moch G\n");
    printf(" Tanggal    = 03 januari 2017\n");
    printf(" Jam        = 14:05 WIB\n\n");
    printf("+-------------------------------------------------------------------------------------------------+\n");
    printf("| Barcode | item    \t\t\t| price     \t\t| quantity  \t| Total   |\n");
    printf("+-------------------------------------------------------------------------------------------------+\n");
    for (k = 0; k <= j; k++)
    {
        grand += tot[k];
        printf("|    %d \t  | %s\t                | %d\t\t       | %d\t\t\t| %d |\n", ibarcode[k], detail[k].name, detail[k].price, qty[k], tot[k]);
    }
    printf("+-------------------------------------------------------------------------------------------------+\n");
    printf("|\t\t\t\t\t\t\t  Total Yang Harus Dibayarkan  =  %d |\n", grand);
    printf("+-------------------------------------------------------------------------------------------------+\n");
}

2 个答案:

答案 0 :(得分:1)

问题是,当您打印收据时,您没有在detail中使用正确的索引。您从detail[k]打印字段,但k不是客户购买的商品的索引,它只是{{1}的当前迭代循环。

您需要保存在第一个循环中搜索for()时找到的索引i以获取价格。

最好有另一个包含购买详细信息的结构,而不是许多单独的数组。它可以使用指针来引用detail数组中的项目。

details

然后你的第一个循环看起来像:

struct purchase {
    struct item *item;
    int qty;
    int tot;
} items[10];

然后您可以在打印收据时访问详细信息:

for (j = 0; j < 10; j++) {
    int barcode;
    scanf("%d", &barcode);
    int item_found = 0;
    for (i = 0; i < 10; i++)
    {
        if (barcode == detail[i].barcode)
        {
            int qty;
            printf("item : %s\n", detail[i].name);
            printf("price : %d\n", detail[i].price);
            printf("enter quantity : ");
            scanf("%d", qty);
            items[j].qty = qty;
            items[j].tot = qty * deatail[i].price;
            items[j].item = &detail[i];
            item_found = 1;
            break;
        }
    }
    if (!item_found) {
    {
        printf("Barcode isn't valid'\n");
        j--;
        break;
    } 
}

答案 1 :(得分:0)

在C / C ++中,索引从0开始,而不是1。

ibarcode [10]表示存在从0到9的索引。