2012-04-29 27 views
5

Tôi có một số dòng đầu vào không xác định. Tôi biết rằng mỗi dòng là một số nguyên, và tôi cần phải thực hiện một mảng với tất cả các dòng, ví dụ:Đọc số dòng không xác định từ đầu vào tiêu chuẩn

Input:

12 
1 
3 
4 
5 

và tôi cần để có được nó như một mảng: {12,1,3,4,5}

Tôi có mã bên dưới, nhưng tôi không thể nhận tất cả các dòng và tôi không thể gỡ lỗi mã vì tôi cần gửi mã để kiểm tra.

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

Cho LINQPad thử xem, bạn có thể biên dịch và pseudo-debug dễ dàng mà không VS. http://www.linqpad.net/ –

+0

Tôi xin lỗi vì tôi không nhìn thấy nó, trình kiểm tra chính tả của tôi được đặt sang tiếng Tây Ban Nha và tất cả văn bản của tôi đều có dấu đỏ, xin lỗi về điều đó. – Santanor

+1

[Ideone] (http://ideone.com) cũng tốt nếu bạn cần cung cấp đầu vào. – Ryan

Trả lời

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()))' trông đẹp hơn :) – Ryan

+0

@minitech, Có, lúc đầu tôi nghĩ viết nó theo cách bạn viết, Nhưng sau đó tôi nghĩ có thể là một chút bối rối. –

+1

Vấn đề không phải là sintaxis, tôi không bắt đầu với C# nhưng tôi không biết tại sao giải pháp này không hoạt động (không, giải pháp của bạn không hoạt động) :(Tôi sẽ tiếp tục tìm kiếm – Santanor

2

Bạn có thực sự cần id trong một mảng? Tôi có lẽ sẽ thử một cái gì đó như thế này:

// 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(); 
    } 

Sau đó, bạn có thể gọi nó với

var stock = ReadItems(Console.In); 
Các vấn đề liên quan