2012-04-29 12 views
5

Ich habe eine unbekannte Anzahl von Zeilen der Eingabe. Ich weiß, dass jede Zeile eine ganze Zahl ist, und ich brauche einen Array mit allen Linien zu machen, zum Beispiel:Eine undefinierte Anzahl von Zeilen von Standardeingabe lesen

Eingang:

12 
1 
3 
4 
5 

und ich brauche es als ein Array zu erhalten: {12,1,3,4,5}

Ich habe den folgenden Code, aber ich kann nicht alle Zeilen erhalten, und ich kann den Code nicht debuggen, weil ich es senden muss, um es zu testen.

List<int> input = new List<int>(); 

string line; 
while ((line = Console.ReadLine()) != null) { 
    input.Add(int.Parse(Console.In.ReadLine())); 
} 

StockItem[] stock = new StockItem[input.Count]; 
for (int i = 0; i < stock.Length; i++) { 
    stock[i] = new StockItem(input.ElementAt(i)); 
} 
+1

Geben LINQPad einen Versuch nennen können, können Sie kompilieren und pseudo-Debug leicht ohne VS. http://www.linqpad.net/ –

+0

Es tut mir leid, ich habe es nicht gesehen, meine Rechtschreibprüfung ist auf Spanisch eingestellt und alle meine Texte sind mit der roten Markierung, tut mir leid. – Santanor

+1

[Ideone] (http://ideone.com) ist auch gut, wenn Sie Eingaben bereitstellen müssen. – Ryan

Antwort

11
List<int> input = new List<int>(); 

// first read input till there are nonempty items, means they are not null and not "" 
// also add read item to list do not need to read it again  
string line; 
while ((line = Console.ReadLine()) != null && line != "") { 
    input.Add(int.Parse(line)); 
} 

// there is no need to use ElementAt in C# lists, you can simply access them by 
// their index in O(1): 
StockItem[] stock = new StockItem[input.Count]; 
for (int i = 0; i < stock.Length; i++) { 
    stock[i] = new StockItem(input[i]); 
} 
+6

'while (! String.IsNullOrEmpty (line = Console.ReadLine()))' würde schöner aussehen :) – Ryan

+0

@minitech, Ja, zuerst dachte ich, schreibe es in der Art, wie du geschrieben hast, aber danach dachte ich vielleicht ist ein wenig verwirrend. –

+1

Das Problem ist nicht die Syntax, ich fange nicht mit C# an, aber ich weiß nicht, warum diese Lösung nicht funktioniert (nein, Ihre Lösung hat auch nicht funktioniert) :(Ich werde weiter suchen es, danke !! – Santanor

2

Wollen Sie die IDs in einem Array tatsächlich benötigen? Ich würde wahrscheinlich so etwas wie dies versuchen:

// Use a function that takes a StringReader as an input. 
    // That way you can supply test data without using the Console class. 
    static StockItem[] ReadItems(StringReader input) 
    { 
     var stock = new List<StockItem>(); 

     // Only call ReadLine once per iteration of the loop. 
     // I expect this is why you're not getting all the data. 
     string line = input.ReadLine(); 
     while(! string.IsNullOrEmpty(line)) { 

     int id; 
     // Use int.TryParse so you can deal with bad data. 
     if(int.TryParse(line, out id)) { 
      stock.Add(new Stock(id)); 
     } 

     line = input.ReadLine(); 
     } 

     // No need to build an populate an array yourself. 
     // There's a linq function for that. 
     return stock.ToArray(); 
    } 

Dann Sie es mit

var stock = ReadItems(Console.In); 
Verwandte Themen