我現在正在學習 C,但在撰寫程式時遇到了問題。本質上,該程式使用零件名稱和數量模擬零件庫存。我需要一個函式來將部件添加到 bin (addParts),以及一個類似的函式來洗掉它們,但我不知道如何修改結構中的變數。我如何實際訪問 main 之外的函式中的變數并更新變數值?我試過看幾個教程,但沒有幫助,因為我對今晚到期的事實感到恐慌,我的大腦正在變成糊狀。我不希望它是為我寫的,但一些指導會非常有幫助。編輯:我意識到我需要澄清該程式應該允許用戶添加或減去零件數量,但不能添加或洗掉零件型別或類別。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int prt;
int num;
int count;
void addParts()
{
while(1)
{
printf("\nType the number of the part you wish to add. ");
scanf("%d", &prt);
printf("\nHow many parts would you like to add? ");
scanf("%d", &num);
}
}
void removeParts()
{
}
int main()
{
struct Inventory
{
char name[15];
int num;
int qty;
};
struct Inventory part1, part2, part3, part4, part5;
struct Inventory part6, part7, part8, part9, part10;
strcpy(part1.name, "Valve");
part1.num = 1;
part1.qty = 10;
strcpy(part2.name, "Bearing");
part2.num = 2;
part2.qty = 5;
strcpy(part3.name, "Bushing");
part3.num = 3;
part3.qty = 15;
strcpy(part4.name, "Coupling");
part4.num = 4;
part4.qty = 21;
strcpy(part5.name, "Flange");
part5.num = 5;
part5.qty = 7;
strcpy(part6.name, "Gear");
part6.num = 6;
part6.qty = 5;
strcpy(part7.name, "Gear Housing");
part7.num = 7;
part7.qty = 5;
strcpy(part8.name, "Vacuum Gripper");
part8.num = 8;
part8.qty = 25;
strcpy(part9.name, "Cable");
part9.num = 9;
part9.qty = 18;
strcpy(part10.name, "Rod");
part10.num = 10;
part10.qty = 12;
while (1)
{
int response;
printf("-------------------------\n"
" INVENTORY\n"
"PART QTY\n"
"-------------------------\n");
printf("1. %s | %d \n", part1.name, part1.qty);
printf("2. %s | %d \n", part2.name, part2.qty);
printf("3. %s | %d \n", part3.name, part3.qty);
printf("4. %s | %d \n", part4.name, part4.qty);
printf("5. %s | %d \n", part5.name, part5.qty);
printf("6. %s | %d \n", part6.name, part6.qty);
printf("7. %s | %d \n", part7.name, part7.qty);
printf("8. %s | %d \n", part8.name, part8.qty);
printf("9. %s | %d \n", part9.name, part9.qty);
printf("10. %s | %d \n", part10.name, part10.qty);
printf("-------------------------\n");
printf("Would you like to 1-Add Parts, 2-Remove Parts, "
"or 3-Quit? ");
scanf("%d", &response);
switch(response)
{
case 1:
addParts();
case 2:
removeParts();
case 3:
break;
case '\n':
break;
default:
printf("\nINVALID INPUT\n\n");
getchar(); //clears out input
break;
}
if (response == 3)
{
break;
}
}
return 0;
}
uj5u.com熱心網友回復:
您需要將庫存放在一個陣列中。因為您要添加或洗掉產品,所以應該動態分配一個。
您需要的功能之一:
struct Inventory
{
char name[15];
int num;
int qty;
};
struct Database
{
size_t nParts;
struct Inventory Parts[];
};
struct Database *addPart(struct Database *database, const char *name, int num, int qty)
{
size_t newsize = database ? database -> nParts 1 : 1;
database = realloc(database, newsize * sizeof(database -> Parts[0]) sizeof(*database));
if(database)
{
database -> nParts = newsize;
strcpy(database -> Parts[newsize - 1].name, name);
database -> Parts[newsize - 1].num = num;
database -> Parts[newsize - 1].qty = qty;
}
return database;
}
uj5u.com熱心網友回復:
如果您想添加新的庫存型別,那么動態陣列是一個非常好的選擇。如果沒有,那么靜態陣列會簡單得多。
static struct {
const char name[15];
int qty;
} database[] = {
{ "Valve", 10 },
{ "Bearing", 5 },
{ "Bushing", 15 },
{ "Coupling", 21 },
{ "Flange", 7 }
/* etc */
};
static const size_t database_size = sizeof database / sizeof *database;
static const int name_len = sizeof database->name - 1;
我看到零件號打算用作主鍵,但它沒有顯示在任何地方,所以你應該根據序數來猜測?我取消了它,而是依賴于陣列中的計算值。作為順序單調值,這保證是唯一的。當我們輸入 part 時number,它number - 1在陣列中。
for(size_t i = 0; i < database_size; i )
printf("%3zu. %-*s| %d\n",
i 1, name_len, database[i].name, database[i].qty);
然后您可以自動列印。如果database是上面的函式addParts和removeParts,那么你可以參考它。我認為這是適合單例設計的情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363018.html
下一篇:簡單的C程式和理解輸出
