目前,我正在制作一个存储程序,但是当我已经添加一个项目时,它仍然会打印1。有人可以告诉我这段代码有什么问题吗?
方向:输入存储(1-10)输入1->添加项目(输入任何内容)->返回主菜单->显示项目
#include <stdio.h>
#include <stdlib.h>
struct info1
{
int quantity2;
char name[60];
};
int main(void)
{
start: ;
struct info1 item1;
struct info1 item2;
struct info1 item3;
struct info1 item4;
struct info1 item5;
struct info1 item6;
struct info1 item7;
struct info1 item8;
struct info1 item9;
struct info1 item10;
int quantity1, mainmenu;
item1.quantity2 = 0;
item2.quantity2 = 0;
item3.quantity2 = 0;
item4.quantity2 = 0;
item5.quantity2 = 0;
item6.quantity2 = 0;
item7.quantity2 = 0;
item8.quantity2 = 0;
item9.quantity2 = 0;
item10.quantity2 = 0;
printf("\n==Storage==");
printf("\n\nInput Storage (1-10) : ");
scanf("%d", &quantity1);
printf("\nMain Menu\n1.Add Item\n2.Show Item\n3.Search Item\n4.Exit\n");
scanf("%d", &mainmenu);
if (quantity1 == 1)
{
if (mainmenu == 1)
{
printf("\nItem Name : ");
scanf("%s", item1.name);
fflush(stdin);
printf("\nItem Quantity : ");
scanf("%d", &item1.quantity2);
}
else if (mainmenu == 2)
{
printf("\n==Item List==");
if (item1.quantity2 == 0)
{
printf("\n1. - ");
}
else if (item1.quantity2 > 0)
{
printf("\n1. %s %d pcs", item1.name, item1.quantity2);
}
}
}
goto start;
}
最佳答案
本质上,您的程序具有这种结构
int main(void)
{
start: //doesn't need ';'
struct info1 item1; //declared something
int quantity1, mainmenu;
//... and other setup
//then some stuff you want to do over and over again
goto start;
}
但是,您希望继续使用这些值,因此不想回到开始状态。
您真正想做的是返回菜单(然后考虑以后使出口正常工作)。
所以这个结构:
int main(void)
{
struct info1 item1; //declared something
int quantity1, mainmenu;
//... and other setup
start: //MOVED
//then some stuff you want to do over and over again
goto start;//like where we set stuff up we don't actually want to re-setup - oops!
}
即在您的代码中
int main(void)
{
struct info1 item1;
//... other stuff...
printf("\n==Storage==");
printf("\n\nInput Storage (1-10) : ");
scanf("%d", &quantity1);
start: //<------- more a loop than a start
printf("\nMain Menu\n1.Add Item\n2.Show Item\n3.Search Item\n4.Exit\n");
scanf("%d", &mainmenu);
//... menu code
//...
goto start;
}
有人说使用goto是个坏主意。
我们可以改用循环:
int main(void)
{
struct info1 item1;
// etc
int quantity1=0, mainmenu=0; //,- initialise!
item1.quantity2 = 0;
// etc
printf("\n==Storage==");
printf("\n\nInput Storage (1-10) : ");
scanf("%d", &quantity1);
while (mainmenu != 4) //<- stop when the user says 4 for exit
{
printf("\nMain Menu\n1.Add Item\n2.Show Item\n3.Search Item\n4.Exit\n");
scanf("%d", &mainmenu);
if (quantity1 == 1)
{
//etc
}
}
}
关于c - 即使我已经添加了项目,为什么此代码仍显示1?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41870617/