Это хорошая практика для проверки меню? - PullRequest
2 голосов
/ 02 апреля 2012

Мне нужно показать меню, которое выводит другое меню, и это выводит другое меню. Но я проверяю эти меню с помощью этой формы: (Только стандартная библиотека 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 Ответ

1 голос
/ 02 апреля 2012

Я бы скорее назвал это вложенным циклом, чем производным .

Возвращаясь к вашему вопросу: Допустимо ли повторно использовать ту же самую переменную в цикле, когда 1-е значение переменной больше не требуется? (Правильно ли я перефразирую ваш вопрос?)

Да, это действительно. Хотя в этом нет ничего технически неправильного, я бы сказал Нет . Потому что это вызывает ненужную путаницу и затрудняет читабельность кода, особенно когда вы внутри одного цикла (как вы делаете внутри внешнего цикла). Это становится еще сложнее по мере роста базы кода. Следовательно, я бы препятствовал такой практике кодирования.

Вы хотите проверить целое число: так как вы собираетесь только передавать по значению (до getint()), нет проблем с использованием другой переменной. Вы можете использовать option1 и option2

Передайте значения в getint() для проверки.

...