簡體   English   中英

這是驗證菜單的好習慣嗎?

[英]Is this a good practice to validate menus?

我需要顯示一個派生另一個菜單的菜單,這派生另一個菜單。 但是我正在用以下形式驗證那些菜單:(僅C標准庫)

do{
    validOption = 1;
    printf("Option #1\n");
    printf("Option #2\n");
    printf("Option #3\n");
    scanf("%i",&option);
    switch(option){
        case 1: /* Do something */ break;
        case 2: /* Do something */ break;
        case 3: /* Do something */ break;
        default: validOption = 0; printf("Invalid Option\n"); break;
    }
}while(!validOption);

但是在派生菜單時,我不知道是否使用相同的option變量和validOption標志。 我認為這不是問題,因為派生的 option變量將被覆蓋,並且我將不需要先前的option變量,因為該option變量僅在特定情況下用於聯接。 現在, validOption標志也不再是問題,因為成功案例發生時意味着validOption = 1 (不會進行更多迭代),並且它將與值為1的先前validOption匹配(因為在這種情況下已加入) 。 這樣就不會干擾。

在派生菜單中使用相同的變量( option, validOption )是一種好習慣嗎?

我還需要使用getint()函數進行驗證,這使我認為,即使有必要,也可以通過實用的方式驗證菜單。

#include<stdio.h>
int main(){
    int option;
    int validOption;
    do{
        printf("Option #1\n");
        printf("Option #2\n");
        printf("Option #3\n");
        scanf("%i",&option);
        switch(option){
            case 1:
                validOption = 1;
                do{
                    printf("Option #1\n");
                    printf("Option #2\n");
                    printf("Option #3\n");
                    scanf("%i",&option);
                    switch(option){
                        case 1:  validOption = 1; /* Another menu with the same option and validOption variables */ break;
                        case 2:  validOption = 1; /* Do something */ break;
                        case 3:  validOption = 1; /* Do something */ break;
                        default: validOption = 0; printf("Invalid Option\n"); break;
                    }
                }while(!validOption);
            break;
            case 2:  validOption = 1; /* Do something */ break;
            case 3:  validOption = 1; /* Do something */ break;
            default: validOption = 0; printf("Invalid Option\n"); break;
        }
    }while(!validOption);
    return 0;
}
//I've put validOption = 1; within all cases just for explaining purposes

我寧願將其稱為嵌套循環,而不是派生循環。

提出您的問題:當不再需要變量的第一個值時,在循環內重用同一變量是否有效? (我是對你的問題重新表述嗎?)

是的,這是有效的。 雖然沒有什么技術上的不對的地方,我會說不 因為,這會引起不必要的混亂,並使代碼的可讀性變得困難,尤其是當您在同一循環中時(就像在外循環中一樣)。 隨着代碼庫的增長,它變得更加困難。 因此,我不鼓勵這種編碼實踐。

您想驗證您的整數:因為,您只要做傳遞值(到getint() ),所以使用另一個變量沒有問題。 您可以使用option1option2

將值傳遞給getint()進行驗證。

暫無
暫無

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

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