0

我最近开始学习 C 只是为了好玩,我决定尝试创建一个菜单系统,但我对我认为失败的问题有疑问:

#include <stdio.h>

int main (void)
{

int x, y, z;

start:
printf ("Menu 1 -- Please select a number.\n");
printf ("1\n");
printf ("2\n");
printf ("Enter selection: ");
scanf ("%i", &x);
getchar();

if (x == 1) {
    x_one:
    printf ("1.\n");
    printf ("Menu 2 -- Please select a number.\n");
    printf ("1\n");
    printf ("2\n");
    printf ("3 -- Go back.\n");
    printf ("Enter selection: ");
    scanf ("%i", &y);
    getchar();

    if (y == 1) {
        y_one_one:
        printf ("1-1.\n");
        printf ("Menu 3 -- Please select a number.\n");
        printf ("1\n");
        printf ("2\n");
        printf ("3 -- Go back.\n");
        printf ("Enter selection: ");
        scanf ("%i", &z);
        getchar();

        if (z == 1 || z == 2)
            printf ("You selected %i.\n", z);

        if (z == 3)
            goto x_one;

        else if (z > 1 && z < 3)
            goto y_one_one;
    }

    if (y == 2) {
        /* mostly the same as "if (y == 1)". */
    }

    if (y == 3)
        goto start;

    else {
        printf ("Please enter a valid selection.\n");
        goto x_one;
    }
}

if (x == 2) {
    /* Mostly the same as "if (x == 1)". */
}

else if (z > 1 && z < 2)
    goto start;

return 0;
}

问题是,一旦我到达第三个菜单,程序将打印出所选数字的字符串,但它不会自行终止,而是显示第三个菜单或返回第二个菜单,无论如何它都会这样做我输入了什么数字。

我只学习了大约两个星期的 C 语言,我对嵌套语句的工作原理不太了解if,如果我能解释一下导致这种意外行为的原因以及如何纠正它,将不胜感激, 谢谢你。

我在 Windows 10 上通过 TDM-GCC-64 使用 GCC 5.1.0。

4

1 回答 1

0
if (y == 3)
    goto start;

else {
    printf ("Please enter a valid selection.\n");
    goto x_one;

那就是它循环备份的地方。如果 y 等于 3,则开始,如果 y 不等于 3,则返回开始。

所以基本上它的说法无论如何都要回到开始。

请记住,即使在您输入 Z 之后也会执行此操作。除非您重定向代码,否则代码会一直下降。

您可能会收到有关您的编程形式的评论,对于新手来说这很好,随着时间的推移和/或在被烧毁后,您会学得更好。

于 2018-03-31T22:23:33.700 回答