我想用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");
}
答案 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的索引。