C 这是验证菜单的好做法吗?

C 这是验证菜单的好做法吗?,c,validation,flags,C,Validation,Flags,我需要显示一个衍生出另一个菜单的菜单,这个衍生出另一个菜单。 但我用以下表单验证这些菜单:(仅C标准库) 但是在派生菜单时,我不知道是否使用相同的选项变量和有效选项标志。 我认为这不是问题,因为派生的选项变量将被覆盖并 我不需要前面的选项变量,因为该选项变量仅用于 在特定情况下加入的目的。 现在,validOption标志也不是问题,因为成功发生案例意味着validOption=1(不会重复更多) 它将与前面的值为1的有效选项匹配(因为已在案例中加入)。所以我不会干涉 在派生菜单中使用相同的变量

我需要显示一个衍生出另一个菜单的菜单,这个衍生出另一个菜单。 但我用以下表单验证这些菜单:(仅C标准库)

但是在派生菜单时,我不知道是否使用相同的
选项
变量和
有效选项
标志。 我认为这不是问题,因为派生的
选项
变量将被覆盖并 我不需要前面的
选项
变量,因为该
选项
变量仅用于 在特定情况下加入的目的。 现在,
validOption
标志也不是问题,因为成功发生案例意味着
validOption=1
(不会重复更多) 它将与前面的值为1的
有效选项
匹配(因为已在案例中加入)。所以我不会干涉

在派生菜单中使用相同的变量(
选项,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
#包括
int main(){
int选项;
int-validOption;
做{
printf(“选项1\n”);
printf(“选项2\n”);
printf(“选项3\n”);
scanf(“%i”,选项(&O));
开关(选件){
案例1:
有效剂量=1;
做{
printf(“选项1\n”);
printf(“选项2\n”);
printf(“选项3\n”);
scanf(“%i”,选项(&O));
开关(选件){
案例1:validOption=1;/*另一个具有相同选项和validOption变量的菜单*/break;
案例2:validOption=1;/*做点什么*/打破;
案例3:validOption=1;/*做点什么*/打破;
默认值:validOption=0;printf(“无效选项”);break;
}
}而(!有效期);
打破
案例2:validOption=1;/*做点什么*/打破;
案例3:validOption=1;/*做点什么*/打破;
默认值:validOption=0;printf(“无效选项”);break;
}
}而(!有效期);
返回0;
}
//我把validOption=1;在所有情况下,仅用于解释目的
我宁愿称之为嵌套循环,而不是派生循环

来回答您的问题:当不再需要变量的第一个值时,在循环中重复使用相同的变量是否有效?(我重新表述你的问题对吗?)

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

您想验证您的整数:因为您只需要通过值传递(到
getint()
),所以使用另一个变量没有问题。您可以使用
选项1
选项2


将值传递到
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