2011-10-12 72 views
1

我想讀取循環中的字符,但我不知道它爲什麼會出錯。這裏是我的代碼:在循環中讀取字符

int sizeOfOurArray; 
    string resultString; 
    char buffer; 
    resultString = ""; 


    Console.WriteLine("Введите количество элементов массива: "); 
    sizeOfOurArray = int.Parse(Console.ReadLine()); 

    char[] ourArray = new char[sizeOfOurArray]; 

    for (int i = 0; i < ourArray.Length; i++) 
    { 
     Console.WriteLine("Введите значение элементу под номером {0}: ", i); 
     buffer = (char)Console.Read(); 
     resultString += buffer.ToString() + " "; 
    } 

    Console.WriteLine(resultString); 
    Console.ReadKey(); 

結果是:http://xmages.net/storage/10/1/0/a/6/upload/27c2a69a.png

PS 謝謝你的回答,這是非常有幫助!

+1

你想提示一個號碼?然後多次提示另一個角色?你的問題並不清楚。 – IanNorton

回答

5

的問題是,Console.Read將只返回任何當用戶點擊返回 - 在該點它會返回(在多個呼叫),每個包括回車和換行字符的。

你可能一次讀取一行,然後在第一個字符:(請注意,我個人使用StringBuilder,而不是重複拼接,但那是另一回事)

string line = Console.ReadLine(); 
// TODO: Handle the user just hitting return... 
char buffer = line[0]; 

2
string input = Console.ReadLine(); 
resultString += (String.IsNullOrEmpty(input)) ? "" : input[0].ToString(); 

解決了它。

+2

這甚至不會編譯。 –

+0

現在它會。 :) – bzlm

+0

回答編輯... –

2

使用Console.ReadKey()讀取單個字符,就像這樣:

int sizeOfOurArray; 
     string resultString; 
     char buffer; 
     resultString = ""; 


     Console.WriteLine("Введите количество элементов массива: "); 
     sizeOfOurArray = int.Parse(Console.ReadLine()); 

     char[] ourArray = new char[sizeOfOurArray]; 

     for (int i = 0; i < ourArray.Length; i++) 
     { 
      Console.WriteLine("Введите значение элементу под номером {0}: ", i); 
      buffer = Console.ReadKey().KeyChar; 
      resultString += buffer.ToString() + " "; 
     } 

     Console.WriteLine(); 
     Console.WriteLine(resultString); 
     Console.ReadKey(); 

希望這有助於

0

稍微改變你的代碼,這個工作對我來說:

using System; 
using System.Text; 

public static class SOQ { 
    public static void Main(string[] argv){ 

    Console.Error.Write("Enter the number of characters: "); 

    // far from ideal but illustrates your code 
    var count = int.Parse(Console.ReadLine()); 

    var buffer = new StringBuilder(); 

    for (int i = 0; i < count; i++){ 
     Console.Error.Write("\n{0}:",i+1); 
     var c = (char)Console.Read(); 
     buffer.Append(c.ToString()); 
    } 

    Console.WriteLine(); 
    Console.WriteLine("Result: `{0}'", buffer.ToString()); 

    } 
}