Мне нужно прочитать целые числа от консоли, набирая белые символы до конца файла, но я не знаю, как, я ищу ответ, но я не мог его найти.Console.Read() до eof
while((x = Console.Read()) != null)
Мне нужно прочитать целые числа от консоли, набирая белые символы до конца файла, но я не знаю, как, я ищу ответ, но я не мог его найти.Console.Read() до eof
while((x = Console.Read()) != null)
int
значения не могут быть опущены. Вы должны использовать отрицательный.
while((x = Console.Read()) != -1)
Обратите внимание, что метод не возвращает -1, если вы не выполните одно из следующих действий:
- Одновременно нажмите клавишу модификатор управления и Z консоли клавиши (Ctrl + Z), который сигнализирует о состоянии конца файла.
- Нажмите эквивалентный ключ, который сигнализирует состояние конца файла, например, функциональную клавишу F6 в Windows.
- Перенаправить поток ввода в источник, например текстовый файл с фактическим символом конца файла.
Затем вы можете прочитать файл по символу и рассчитать каждое разделенное значение с помощью простой математики. Он ленив, поэтому не будет перебирать файл до конца сразу для вычисления всех значений.
static void Main(string[] args)
{
foreach (int i in Read(Console.In))
{
Console.WriteLine(i);
}
}
static IEnumerable<int> Read(TextReader rdr)
{
int ch;
bool neg = false;
int value = 0;
int count = 0;
while ((ch = rdr.Read()) != -1)
{
if (char.IsWhiteSpace(ch))
{
if (count > 0)
yield return neg ? -value : value;
count = 0;
value = 0;
neg = false;
}
else if (count == 0 && ch == '-')
{
neg = true;
}
else if (ch >= '0' && ch <= '9')
{
count++;
value = value*10 + (ch - '0');
}
else
throw new InvalidDataException();
}
if (count > 0)
yield return neg ? -value : value;
}
Я думаю, это немного перебор, LOL. – Andrew
@ Хорошо, что это хорошо, потому что с помощью TextReader можно инициализировать файл и консоль. Он ленив и не имеет накладных расходов, как метод Split. Кроме того, я не совсем понимаю исходный вопрос, тогда я попытался добавить полный ответ. –
Вы можете технически использовать 'int?', Который является нулевым. – Greg
, но затем он не читается до тех пор, пока eof не достигнет нуля –
@Greg 'Console.Read()' возвращает 'int' @KingstonJoshua исправлено. возвращаемое значение -1 не равно –