Questo non è un problema serio o qualcosa che qualcuno mi ha chiesto di fare, solo una cosa apparentemente semplice che mi è venuta in mente come esercizio mentale ma che mi ha messo a tacere e che sento di dover già conoscere la risposta. Potrebbe esserci un duplicato ma non sono riuscito a trovarne uno.
Supponiamo che qualcuno ti abbia chiesto di scrivere una parte di codice che chiede all'utente di inserire un numero e, ogni volta che il numero inserito non è zero, dice "Errore" e chiede di nuovo. Quando entrano nello zero si ferma.
In altre parole, il codice continua a chiedere un numero e si ripete finché non viene inserito zero. In ogni iterazione tranne il primo stampa anche "Errore".
Il modo più semplice a cui posso pensare è qualcosa di simile allo pseudocodice seguente:
int number = 0;
do
{
if(number != 0)
{
print("Error");
}
print("Enter number");
number = getInput();
}while(number != 0);
Mentre ciò fa ciò che è previsto, personalmente non mi piace che ci sia codice ripetuto (testare il numero! = 0 due volte), qualcosa che generalmente dovrebbe essere evitato. Un modo per evitare questo sarebbe qualcosa di simile:
int number = 0;
while(true)
{
print("Enter number");
number = getInput();
if(number == 0)
{
break;
}
else
{
print("Error");
}
}
Ma quello che non mi piace in questo è "while (true)", un'altra cosa da evitare.
L'unico altro modo in cui posso pensare include un'altra cosa da evitare: etichette e goto
s:
int number = 0;
goto question;
error:
print("Error");
question:
print("Enter number");
number = getInput();
if(number != 0)
{
goto error;
}
Un'altra soluzione sarebbe avere una variabile extra per testare se dovresti dire "Errore" o meno, ma questa è una memoria sprecata.
C'è un modo per farlo senza fare qualcosa che è generalmente considerato una cattiva pratica (codice ripetuto, un ciclo teoricamente infinito o l'uso di goto
)?
Capisco che qualcosa del genere non sarebbe mai abbastanza complessa che il primo modo sarebbe un problema (in genere si chiama una funzione per convalidare l'input) ma sono curioso di sapere se c'è un modo in cui non ho pensato di.