0
votes

Ignorer l'entrée jusqu'à la réponse valide?

Désolé si cela est similaire à une question existante - j'ai essayé de regarder!

De toute façon, j'ai un programme comme suit: xxx

et je 'm Essayez de l'obtenir Ignorer les réponses non valides jusqu'à ce que je donne une réponse valide. Si par exemple, je devais appuyer sur la touche A ou B ou C mais j'ai appuyé sur d , Cela me dise simplement ma réponse n'est pas une option valide et d'attendre jusqu'à ce que je donnais une réponse valide .


2 commentaires

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


4 Réponses :


0
votes
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            
    }
}


0 commentaires

0
votes

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


3 commentaires

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 () . 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" 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 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.



1
votes

Vous pouvez implémenter (extraire) une méthode: xxx

alors vous pouvez l'utiliser: xxx


2 commentaires

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 , pas réponse ; s'il vous plaît, voyez mon EDT



1
votes

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


2 commentaires

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.