Чтение символа в цикле

#c# #char

#c# #символ

Вопрос:

Я пытаюсь прочитать символ в цикле, но я не знаю, почему это работает неправильно. Вот мой код:

     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. Вы хотите запросить номер? затем запрашивать другой символ столько раз? Из вашего вопроса неясно.

Ответ №1:

Проблема Console.Read в том, что возвращает что-либо только тогда, когда пользователь нажимает return — в этот момент он вернет (в нескольких вызовах) каждый из символов, включая возврат каретки и перевод строки.

Потенциально вы можете прочитать строку за раз, а затем взять первый символ:

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

(Обратите внимание, что я бы лично использовал StringBuilder , а не повторную конкатенацию, но это другое дело.)

Ответ №2:

Используйте консоль.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();
  

Надеюсь, это поможет

Ответ №3:

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

решает это.

Ответ №4:

Небольшое изменение в вашем коде, это работает для меня:

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

  }
}