2012-04-02 2 views
2

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

я предпочел бы называть его вложенной цикла, чем полученного.

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

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

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

Передайте значения getint(), чтобы подтвердить его.

+0

:) Извините за мой английский, но да, это вызывает путаницу, я не был уверен в повторном использовании переменных ... так что спасибо. – nEAnnam

+0

Все в порядке. Я легко понял, что вы хотели спросить в любом случае ;-) –

Смежные вопросы