0

Ich bin ziemlich neu in C# und schreibe eine einfache Konsole App als Übung. Ich möchte, dass die Anwendung eine Frage stellt und nur zum nächsten Codeabschnitt fortschreitet, wenn die Benutzereingabe gleich 'y' oder 'n' ist. Hier ist, was ich bisher habe.C# Schleife bis Console.ReadLine = 'y' oder 'n'

 static void Main(string[] args) 
    { 

     string userInput; 
     do 
     { 
      Console.WriteLine("Type something: "); 
      userInput = Console.ReadLine(); 
     } while (string.IsNullOrEmpty(userInput)); 

     Console.WriteLine("You typed " + userInput); 
     Console.ReadLine(); 

     string wantCount; 
     do 
     { 
      Console.WriteLine("Do you want me to count the characters present? Yes (y) or No (n): "); 
      wantCount = Console.ReadLine(); 
      string wantCountLower = wantCount.ToLower(); 
     } while ((wantCountLower != 'y') || (wantCountLower != 'n')); 


    } 

Ich habe Probleme von string wantCount; ab. Ich möchte den Benutzer fragen, ob er die Zeichen in seinem String zählen möchte, und diese Frage solange wiederholen, bis entweder 'y' oder 'n' (ohne Anführungszeichen) eingegeben wird.

Beachten Sie, dass ich auch für Groß-/Kleinschreibung eingeben möchte, so dass ich Bild möchte ich die wantCount Zeichenfolge zu niedrigeren konvertieren - ich weiß, dass wie ich dies derzeit nicht funktioniert, wie ich string wantCountLower innerhalb einstellen die Schleife, so kann ich nicht in der while Klausel außerhalb der Schleife verweisen.

Können Sie mir helfen zu verstehen, wie ich diese Logik erreichen kann?

+1

'willCountLower' ist innerhalb des Bereichs der Do-While definiert, so dass es außerhalb nicht verfügbar ist. Sie müssen es vor der Schleife definieren (oder besser, verwenden Sie die Groß-/Kleinschreibung nicht). – Luaan

+0

Ich denke, Sie müssen richtig lesen, wie die while-Syntax funktioniert – Takarii

+1

''y'' ist die Notation für das Zeichen, das Sie brauchen, um die Zeichenfolge zu überprüfen. – prof1990

Antwort

2

Sie drücken könnte die Eingangsprüfung innerhalb der Schleife bewegen und nutzen eine break zu verlassen. Beachten Sie, dass die von Ihnen verwendete Logik immer true ist. Daher habe ich die Bedingung invertiert und auch Ihren char -Vergleich in eine string geändert.

string wantCount; 
do 
{ 
    Console.WriteLine("Do you want me to count the characters present? Yes (y) or No (n): "); 
    wantCount = Console.ReadLine(); 
    var wantCountLower = wantCount?.ToLower(); 
    if ((wantCountLower == "y") || (wantCountLower == "n")) 
     break; 
} while (true); 

Beachten Sie auch die Null-Bedingungsoperator (?.) vor ToLower(). Dadurch wird sichergestellt, dass ein NullReferenceException nicht geworfen wird, wenn nichts eingegeben wird.

+0

Es gab ein paar gute Antworten, die funktionieren, aber ich denke, das war, was ich gesucht habe - es passt am besten, basierend auf dem, was ich erreichen wollte. Danke für Ihre Hilfe. – Klicker

0

Wenn Sie ein Zeichen vergleichen wollen, dann ist sie nicht braucht für ReadLine Sie ReadKey dafür verwenden können, wenn Ihr Zustand ist dies: while ((wantCountLower != 'y') || (wantCountLower != 'n')); Ihre Schleife wird unendlich sein, so dass Sie && stattdessen für || können hier oder es wird while(wantCount!= 'n') sein, so dass es Schleifen, bis Sie n

char charYesOrNo; 
do 
{ 
    charYesOrNo = Console.ReadKey().KeyChar; 
    // do your stuff here 
}while(char.ToLower(charYesOrNo) != 'n'); 
Verwandte Themen