簡體   English   中英

編程新手-C-菜單系統掉線問題

[英]Programming Novice - C - Issue with Fall-through in Menu System

我最近剛開始學習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;
}

問題是,一旦我到達第三個菜單,程序將打印出所選數字的字符串,但不是終止自身,而是顯示第三個菜單或返回第二個菜單,並且無論我輸入的數字。

我只是一直在研究下,在約兩個星期,我不太有關於如何嵌套一個正確的認識if語句的工作,如果我能請得到的是什么導致了這個意外的行為的解釋以及如何糾正它,這將是很大的謝謝,謝謝。

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

if (y == 3)
    goto start;

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

多數民眾贊成在其循環備份。 如果y等於3,則重新開始;如果y不等於3,則重新開始。

所以基本上不管怎么說,它的說法可以追溯到開始。

請記住,即使您輸入Z,它也會執行。除非您重定向它,否則代碼會不斷下降。

您可能會收到有關程序形式的注釋,如果您不喜歡它,那將是一件好事,隨着時間的流逝和/或在被燒毀之后,您會學得更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM