Мне стало интересно, что именно происходит в данном коде:
using System;
using System.IO;
class VideoSharp {
static void Main () {
int count = 0;
Stream str = Console.OpenStandardInput ();
while (true) {
int x = str.ReadByte ();
if (x == -1)
break;
count++;
}
Console.WriteLine (count);
}
}
найти всю нужную информацию не смог.
В str мы помещаем поток ввода консоли, а дальше идёт в цикле while str.ReadByte ().
Но что именно делает этот метод?
Почему он останавливает программу (тот же вопрос и к Console.Read ()), ожидая ввода, но только один раз (После нажатия Enter он не будет останавливать программу на 2, 3 и т.д. символах)?
Почему он не возвращает -1 в моём коде, когда прошёлся по всем байтам?
Но что именно делает этот код?
Данный код проходит по всем символам, введённым в консоли за один раз, и считает количество введённых байтов. Стоит так же учитывать, что данная программа рассматривает нажатие клавиши Enter как ввод символов CR и LF (по данной теме советую почитать Wikipedia - NewLine).
Почему он останавливает программу, но только один раз?
Данная программа приостанавливается, ожидая ввода, бесконечное число раз благодаря циклу while (true) { }
. Программа ожидает ввод символов в поток, отправка которых в программу в данном случае осуществляется посредством нажатия клавиши Enter. Следовательно, после каждого нажатия клавиши ввода программа будет останавливаться, считать количество байтов (в случае с ASCII символами: количество символов = количество байтов). Из-за того что поток не закрывается, переменная x
никогда не принимает значение -1
, из-за чего и происходит возврат к вводу символов в консоль.
Почему он не возвращает -1 в моём коде, когда прошёлся по всем байтам?
Каким образом вы предполагаете данный код должен возвращать значение? Данный код находится в методе с типом возвращаемого значения void, он по определению не может возвращать какое-либо значение. Если вы имели в виду строку Console.WriteLine (count);
, то из-за бесконечного цикла while данный код не выполняется никогда.
Если вы напишите в комментарий чего именно вы хотели достичь, я попытаюсь помочь вам с кодом.
EDIT 0: Стоит упомянуть, что символ окончания потока (а точнее символ EOF Wikipedia - End-of-file) вводится в консоль ОС Windows по нажатию комбинации клавиш Ctrl+Z. При передаче данного символа в поток нажатием клавиши Enter получается выйти из цикла и достичь вывода переменной count
в консоль.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Необходимо создать личный кабинет клиента бухгалтерской фирмыВ личном кабинете для пользователя будет доступна информация о сдаче налоговой...
Есть форма, которой нужно передать в php значения переменных var и letПеременные var передаются без проблем, а let не хотят
После каждого запуска скрипта вылетает ошибка: [Время + Дата] PHP Notice: Undefined offset: 0 in Путь on line 4