2012-04-02 5 views
2

Ich muss ein Menü anzeigen, das ein anderes Menü ableitet und daraus ein anderes Menü ableitet. Aber ich bin diese Menüs mit dieser Form der Validierung: (nur C-Standardbibliothek)Ist es eine gute Übung, Menüs zu validieren?

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); 

Aber zum Zeitpunkt der Ableitung eines Menüs ich weiß nicht, ob das gleiche verwenden option Variable und validOption Flagge. Ich denke, dass das kein Problem ist, da die abgeleitetoption Variable überschrieben werden soll und Ich werde nicht die vorherige option Variable benötigen, da diese option Variable für seine nur Zweck verwendet wurde, die einen bestimmten Fall mitmachen ist. Jetzt validOption Flag ist auch kein Problem, da, wenn ein erfolgreicher Fall auftritt bedeutet, dass validOption = 1 (wird nicht mehr iterieren) und es wird mit dem vorherigen validOption, die einen Wert von 1 (seit in einem Fall beigetreten ist) . Also wird nicht stören.

Ist es empfehlenswert, dieselben Variablen (option, validOption) in abgeleiteten Menüs zu verwenden?

Auch ich muss mit einer getint() Funktion validieren, die mich denken lassen, dass, wenn sogar notwendig ist, Menüs zu validieren, die es in einer praktischen Weise sehen.

#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 

Antwort

1

Ich würde lieber nennen es verschachtelte Schleife als abgeleitet.

Kommen Sie zu Ihrer Frage: Ist es zulässig, dieselbe Variable innerhalb einer Schleife erneut zu verwenden, wenn der 1. Wert der Variablen nicht mehr benötigt wird? (Habe ich recht, wenn ich Ihre Frage neu formuliere?)

Ja, es ist gültig. Obwohl nichts technisch falsch ist, würde ich sagen: No. Weil es unnötige Verwirrung verursacht und die Lesbarkeit des Codes schwierig macht, besonders wenn Sie es in der gleichen Schleife haben (wie Sie es in Ihrer äußeren Schleife tun). Es wird noch schwieriger, wenn die Codebasis wächst. Daher würde ich eine solche Kodierungspraxis ablehnen.

Sie möchten Ihre Ganzzahl validieren: Da Sie nur einen Wert als Wert übergeben (auf getint()), gibt es kein Problem bei der Verwendung einer anderen Variablen. Sie können option1 und option2

verwenden. Übergeben Sie die Werte an getint(), um es zu überprüfen.

+0

:) Sorry für mein Englisch, aber ja, es verursacht Verwirrung, ich war mir nicht sicher, Variablen wieder zu verwenden ... also danke. – nEAnnam

+0

Das ist in Ordnung. Ich habe leicht verstanden, was du sowieso fragen willst ;-) –