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