开发者

Read char in cycle

I'm trying to read char in cycle, but I don't know why it works wrong. Here is my code:

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

Result is: http://xmag开发者_开发百科es.net/storage/10/1/0/a/6/upload/27c2a69a.png

PS Thanks for answers, it was really helpful!


The problem is that Console.Read will only return anything when the user hits return - at which point it will return (in multiple calls) each of the characters including the carriage return and line feed.

You could potentially read a line at a time and then take the first character:

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

(Note that I'd personally use a StringBuilder rather than repeated concatenation, but that's a different matter.)


Use Console.ReadKey() to read a single char, like this:

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

Hope this helps


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

solves it.


A slight change to your code, this works for me:

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

  }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜