Désolé si cela est similaire à une question existante - j'ai essayé de regarder!
De toute façon, j'ai un programme comme suit: p> et je 'm Essayez de l'obtenir Ignorer les réponses non valides em> jusqu'à ce que je donne une réponse valide. Si par exemple, je devais appuyer sur la touche A code> ou B code> ou C code> mais j'ai appuyé sur d code>, Cela me dise simplement ma réponse n'est pas une option valide em> et d'attendre jusqu'à ce que je donnais une réponse valide em>. p> p> p>
4 Réponses :
void Main()
{
string temp;
Console.WriteLine("question");
while (true)
{
temp = Console.ReadLine();
if (temp == "a")
Console.WriteLine("Incorrect");
else if (temp == "b")
Console.WriteLine("Incorrect");
else if (temp == "c")
Console.WriteLine("Correct");
else if (temp == "exit") // providing a way to exit the loop
break;
else { } // ignore input
}
}
Ceci est l'étui de manuel pour les deux ... tandis que les boucles et les relevés de commutation / cas. Asumant "A" est toujours une entrée valide:
bool validInput = false;
do{
Console.WriteLine("question");
string input = Console.ReadLine();
switch(input){
case "a":
Console.WriteLine("Incorrect");
validInput = true;
break;
//other cases and default omitted
}
}while(!validInput);
Il suffisait de déplacer la question à l'extérieur de la boucle et a travaillé exactement comment j'ai spécifié, merci! Quant au code de nettoyage, vous êtes à vous ou à l'autre réponse une «meilleure solution», s'il y a même un objectif? Sinon, quelle est la différence?
@Joshua un commutateur ... L'affaire est la façon dont vous faites habituellement avec des menus / validation d'entrée dans la console. L'autre construction est un tryparse () code>. Les deux enveloppés dans une ... tandis que "jusqu'à ce que l'utilisateur commence à avoir un sens" (avoir le contrôle à l'arrière, garantit au moins une exécution, mais des options illimitées pour la répétition). La question avec la chose if / sinon est que plusieurs cas pouvaient correspondre. "A" code> serait incorrect. Mais déclenchez également la région de l'autre à la sortie. Lorsque vous ne voulez probablement que si vous êtes déclenché lorsque Aucun i> des autres cas s'applique. C'est quelque chose que le cas par défaut de commutateur gérera.
@Joshua Bien sûr, la réponse de Stefano est probablement la meilleure.
Vous pouvez implémenter (extraire) une méthode: alors vous pouvez l'utiliser: p>
J'aime cette solution, cependant, lorsque je l'applique, il y a une erreur avec cette ligne: console.writeline ($ "{(réponse == 'b'?" Correct ":" incorrect ")}"); La réponse du nom n'existe pas dans ce contexte, je fais quelque chose de mal ou est-ce que cela nécessite de corriger?
@Joshua: Je suis désolé pour la faute de frappe qu'il aurait dû être résultat code>, pas réponse code>; s'il vous plaît, voyez mon EDT
Je ne sais pas si c'est ce que vous souhaitez:
public static void Main()
{
Console.WriteLine("question");
bool tryAgain;
bool enterPressed;
char input = ' ';
do
{
enterPressed = false;
do
{
tryAgain = true;
var key = Console.ReadKey();
switch (key.KeyChar)
{
case 'a':
case 'b':
case 'c':
input = key.KeyChar;
tryAgain = false;
break;
default:
Console.Write("\b \b");//Delete last char
break;
}
} while (tryAgain);
var confirmkey = Console.ReadKey();
if (confirmkey.Key == ConsoleKey.Enter)
{
enterPressed = true;
Console.WriteLine();
}
else
{
Console.Write("\b \b"); //Delete last char
}
} while (!enterPressed);
switch (input)
{
case 'a':
case 'b':
Console.WriteLine("incorrect");
break;
case 'c':
Console.WriteLine("correct");
break;
}
}
Vous avez un écrivain vide () dans le cas A / B? Habituellement, les entrées sont confirmées avec Entrée, ce qui fait également une nouvelle ligne.
Oui parce que j'ai utilisé Readkey au lieu de Readline, Readlines ajoute automatiquement un breackpoint. Si vous utilisez readline, vous ne pouvez pas ignorer l'entrée. Mais je peux ajouter confirmer avec ENTER, si vous avez besoin.
Vous avez besoin d'une ... tandis que la boucle. Console. Entrée jusqu'à ce que l'utilisateur ait du sens? C'est ce que c'est là pour! De plus, ceux-ci ressemblent vraiment à ce qu'ils devraient être une déclaration de swtich / cas.
Est-ce que cela répond à votre question? Comment boucle une application de console