C#

Консольный ввод cout и ReadLine

Весь 1 курс универа изучал C++, а на 2 курсе начали учить C#.
Сразу возник вопрос, почему через cout я могу вводить числа в консоль через пробел
Например
Введите 3 числа: 1 2 3 //Enter
А в C# я могу вводить только по 1 числу
1
2
3
Слышал что можно использовать метод split и прочие костыли, но все равно интересно что там под капотом
нахера ты C# начали изучать, ты раньше на паскале писал круто и Delphi 7 знаешь, например, как я ?

Я в команде был, еще до вышки, в школе в 11 классе очень стал круто прогать. Не люблю C#, куча недочётов, связывание объектов через дописывание процедур - лажа, мелко, но обидно, остальное майкрпософт у бурладна потырить не смогла)). C# - это как бы паскальнедоделанный, но полнофункциональный, если привыкнуть, то можно и крутые фики творить, но дельфина 7 - не переплюнуть - он был гораздо круче и могущественней(

До сих пор, для PC-программ я усатнавливаю виртуальную машину с XP SP3 и ставлю Deplhi7, для решения элементарных задач, ну или просто в Excel прогаю ))
... ...
... ...
14 566
Лучший ответ
>А в C# я могу вводить только по 1 числу
Это неверно, ты просто не умеешь.
Михаил Лозовой
Михаил Лозовой
60 949
В C++ std::cin это объект, для которого перегружен оператор битового сдвига вправо, который, в свою очередь, возвращает ссылку на поток, что позволяет его многократно и последовательно вызывать при работе с одним объектом std::cin. То же самое можно сказать и про std::cout, std::cerr и std::clog, только здесь перегружен оператор битового сдвига влево.

В C# для консольного ввода вывода используется методы статического класса Console, которые для ввода данных из консоли читают строку либо символ, в зависимости от метода. Принятую таким образом строку либо символ можно в соответствие с типом присвоить к переменной-строке либо переменной-символу. Во всех остальных случаях требуется явная конвертация строкового представления к требуемому типу. С этой целью каждый базовый тип имеет методы: Parse(), TryParse(), которые позволяют выполнить явное приведение строки к типу, а метод Split() позволяет выполнить множественную инициализацию, возвращая массив токенов символьного типа, которые в дальнейшем можно привести к элементам массива заданного типа. Например,
 using System; 
using System.Linq;
namespace Answer {
class Program {
static private void Main() {
Console.Write("Введите строку целых чисел: ");
var line = Console.ReadLine();
if (line is not null) {
try {
var box = line.Split(' ').Select(x => int.Parse(x)).ToArray();
var sum = box.Sum();
Console.WriteLine($"Сумма: {sum}");
} catch (FormatException e) {
Console.WriteLine(e.Message);
} catch (OverflowException e) {
Console.WriteLine(e.Message);
}
}
Console.ReadKey();
}
}
}
P.S. Также существует класс Convert, который содержит методы для преобразования строки к базовым типам, но он считается устаревшим для таких задач.
Dan Dragomir
Dan Dragomir
71 604
у каждого языка свой синтаксис
А Split чем не нравится? В относительно простом и достаточно удобном Python'e каскадный ввод как в плюсах тоже осуществляется через split, и что - это тоже "костыль" ? Вон как, например, среднее можно вычислить, не объявляя заранее количество членов числовой последовательности:
using System; namespace New_Project
{ class Program { public static void Main()
{ double s = 0.0; int i, n; Console.Write("» ");
var line = Console.ReadLine().Split();
n = line.Length; for (i = 0; i < n; i++)
s += Convert.ToDouble(line[i]);
Console.WriteLine("average = " + (s / n)); } } }
Что не так ? Всё здесь нормально...
Василий Мамин
Василий Мамин
66 572