c - 尽管我已经添加了项目,为什么此代码仍然打印 1?

标签 c

目前我正在制作一个存储程序,但当我已经添加一个项目时,它仍然打印 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/

相关文章:

c - 使用switch语句制作一个简单的计算器

c - 主机之间的持久 TCP 连接,即使 IP 地址发生变化

c - 如何找到数组的大小(从指向数组第一个元素的指针)?

c - strcpy() 实现.. 如何在函数本身中初始化指向函数的传递指针

c - 在 C 中使用 fread 时,读取 block 大小是否有限制?

c - 如何在内联汇编中使用可变偏移量?

c - 如何使用lldb调试segmentation fault

c++ - GLUPerspective 的原始 OpenGL 等价物?

c++ - 在 C 中初始化一个 char 数组。哪种方式更好?

c - 十进制转二进制