这是验证菜单的好习惯吗?

时间:2012-04-02 19:42:44

标签: c validation flags

我需要显示一个菜单,该菜单导出另一个菜单,并导出另一个菜单。 但我正在用这种形式验证这些菜单:(只有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(不会迭代更多) 它将与之前的validOption匹配,其值为1(因为已加入案例)。所以不会干涉。

在派生菜单中使用相同的变量(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

1 个答案:

答案 0 :(得分:1)

我宁愿称之为嵌套循环而不是派生

来到你​​的问题:当不再需要变量的第一个值时,在循环中重复使用相同的变量是否有效? (我是否正确地重述了你的问题?)

是的,这是有效的。虽然技术上没有任何问题,但我会说。因为它会导致不必要的混淆并使代码可读性变得困难,尤其是当它在同一个循环中时(就像在外部循环中一样)。随着代码库的增长,它变得更加困难。因此,我会阻止这种编码实践。

你想验证你的整数:因为,你只会按值传递(到getint()),使用另一个变量没有问题。您可以使用option1option2

将值传递给getint()以验证它。