2011-10-12 34 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()); 

    } 
}