2016-03-26 6 views
0

Ich versuche ein Programm zu erstellen, das Buchstaben nur als Eingabe und nicht doppelt verwendet. Ich bekomme einen Fehler, wenn ich einen Buchstaben in einen Eingang lege. Dies ist, was ich tun muss, muss ich die Benutzereingabe in jeder Zeile (wie eine Eingabe, b eingeben, etc), wenn es einen Duplizierungswert Ich brauche eine Fehlermeldung und fährt mit der Eingabe und wenn dort ist ein falscher Wert, bekomme ich einen anderen Fehler, der das angibt. Ich kann LINQ, Hashset oder Liste nicht verwenden, es müssen Arrays sein.C# Eingaben in verschiedenen Zeilen benötigen

static void Main(string[] args) 
{ 
    char[] Array = new char[5]; 
    Console.WriteLine("Please Enter 5 Letters B/W a through j only: "); 
    string letters = "abcdefghij"; 

    char[] read = Console.ReadLine().ToLower().ToCharArray(); 

    //loop through array 
    for (int i = 0; i < 5; i++) 
    { 
     if (letters.Contains(read[i]) && !Array.Contains(read[i])) 
     { 
      Array[i] = read[i]; 
     } 
     else 
     { 
      Console.WriteLine("You have entered an incorrect value"); 
     } 

    } 

    Console.WriteLine("You have Entered the following Inputs: "); 
    for (int i = 0; i < Array.Length; i++) 
    { 
     Console.WriteLine(Array[i]); 
    } 
    Console.ReadKey(); 
} 
+0

Und Ihre Idee ist es, die 5 Buchstaben hintereinander zu bekommen? Eine mögliche Lösung besteht darin, die Console.ReadLine in eine do while-Schleife einzufügen, und für jede Eingabe des Benutzers können Sie durch seine Eingabe schlüpfen, um nach gültigen Einträgen zu suchen. Wenn Sie für jedes Zeichen eine Schleife für die 5 Buchstaben wie für eine In-Schleife durchführen und sie zu einem, sagen wir, Hashset hinzufügen, das nur eindeutige Werte erlaubt, sollte das Hashset am Ende jeder Iteration 5 Elemente haben, falls nicht, erneut ausgeben der Benutzer, um einen gültigen Satz von Buchstaben einzugeben. Nach der Validierung können Sie die Schleife verlassen und die Benutzereingabe verarbeiten. – rmjoia

+0

Eigentlich Contains() ist eine Linq-Erweiterung. – derloopkat

+0

Mögliches Duplikat von [Frage nach Benutzereingabe mit Buchstaben (az) nur ohne Sonderzeichen oder Zahlen in C#] (http://stackoverflow.com/questions/36191717/how-to-ask-for-user-input- with-letters-az-only-ohne-spezielle-Zeichen-oder) –

Antwort

-1

das ist Ihnen Problem

for (int i = 0; i < 5; i ++)

ist dies Ihr fix:

static void Main(string[] args) 
      { 
       char[] Array = new char[5]; 
       Console.WriteLine("Please Enter 5 Letters B/W a through j only: "); 
       string letters = "abcdefghij"; 

       char[] read = Console.ReadLine().ToLower().ToCharArray(); 

       //loop through array 
       for (int i = 0; i < read.Length; i++) 
       { 
        if (letters.Contains(read[i]) && !Array.Contains(read[i])) 
        { 
         Array[i] = read[i]; 
        } 
        else 
        { 
         Console.WriteLine("You have entered an incorrect value"); 
        } 

       } 

       Console.WriteLine("You have Entered the following Inputs: "); 
       for (int i = 0; i < Array.Length; i++) 
       { 
        Console.WriteLine(Array[i]); 
       } 
       Console.ReadKey(); 
      } 
0

denke ich diese mehr oder weniger, was Sie wollen:

var max = 5; 
var array = new char[max]; 
var letters = "abcdefghij"; 

var count = 0; 
while (count < 5) 
{ 
    Console.WriteLine("Please Enter {0} Letters B/W a through j only: ", max); 

    var key = Console.ReadKey(); 
    var read = key.KeyChar 

    if (!letters.Contains(read)) 
    { 
     Console.WriteLine("You have entered an incorrect value"); 
     continue; 
    } 

    var found = false; 
    for (int i = 0; i < count; i++) 
    { 
     if (array[i] == read) 
     { 
      found = true; 
     } 
    } 

    if (found) 
    { 
     Console.WriteLine("You have entered an duplicate value"); 
     continue; 
    } 

    array[count++] = read; 
} 

Console.WriteLine("You have Entered the following Inputs: "); 
for (int i = 0; i < array.Length; i++) 
{ 
    Console.WriteLine(array[i]); 
} 

Console.ReadKey(); 
0

Wenn der Benutzer die Werte einzeln eingeben soll, müssen Sie jedes Zeichen in einer Schleife anfordern. Etwas wie:

static void Main(string[] args) 
{ 
    const string validValues = "abcdefghij"; 
    var enteredCharacters = new char[5]; 
    for (int i = 0; i < enteredCharacters.Length; i++) 
    { 
     Console.WriteLine("Please enter a unique character between a and j"); 
     var input = Console.ReadLine(); 
     if (input.Length == 0) 
     { 
      Console.WriteLine("You did not enter a value."); 
      return; 
     } 
     if (input.Length > 1) 
     { 
      Console.WriteLine("You have entered more than 1 character"); 
      return; 
     } 
     var character = input[0]; 
     if (!validValues.Contains(character)) 
     { 
      Console.WriteLine("You have entered an invalid character"); 
      return; 
     } 
     if (enteredValues.Contains(character)) 
     { 
      Console.WriteLine("You have already entered this character"); 
      return; 
     } 
     enteredCharacters[i] = character; 
    } 
    // process numbers. 
} 
Verwandte Themen