Как в си шарп ввести с клавиатуры переменную
Для вывода информации на консоль мы уже использовали встроенный метод Console.WriteLine . То есть, если мы хотим вывести некоторую информацию на консоль, то нам надо передать ее в метод Console.WriteLine:
string hello = "Привет мир"; Console.WriteLine(hello); Console.WriteLine("Добро пожаловать в C#!"); Console.WriteLine("Пока мир. "); Console.WriteLine(24.5);
Привет мир! Добро пожаловать в C#! Пока мир. 24,5
Нередко возникает необходимость вывести на консоль в одной строке значения сразу нескольких переменных. В этом случае мы можем использовать прием, который называется интерполяцией:
string name = "Tom"; int age = 34; double height = 1.7; Console.WriteLine($"Имя: Возраст: Рост: м");
Для встраивания отдельных значений в выводимую на консоль строку используются фигурные скобки, в которые заключается встраиваемое значение. Это можем значение переменной ( ) или более сложное выражение (например, операция сложения ). А перед всей строкой ставится знак доллара $.
При выводе на консоль вместо помещенных в фигурные скобки выражений будут выводиться их значения:
Имя: Tom Возраст: 34 Рост: 1,7м
Есть другой способ вывода на консоль сразу нескольких значений:
string name = "Tom"; int age = 34; double height = 1.7; Console.WriteLine("Имя: Возраст: Рост: м", name, height, age);
Здесь мы видим, что строка в Console.WriteLine содержит некие числа в фигурных скобках: , , . Это плейсхолдеры, вместо которых при выводе строки на консоль будут подставляться некоторые значения. Подставляемые значения указываются после строки через запятую.
При этом важен порядок подобных плейсхолдеров. Например, в данном случае после строки первой указана переменная name, потом height и потом age. Поэтому значение переменной name будет вставляться вместо первого плейсхолдера — (нумерация начинается с нуля), height — вместо , а age — вместо . Поэтому в итоге пи выводе на консоль строка
"Имя: Возраст: Рост: м"
будет заменена на
"Имя: Tom Возраст: 34 Рост: 1,7м"
Console.Write
Кроме Console.WriteLine() можно также использовать метод Console.Write() , он работает точно так же за тем исключением, что не добавляет переход на следующую строку, то есть последующий консольный вывод будет выводиться на той же строке.
string name = "Tom"; int age = 34; double height = 1.7; Console.Write($"Имя: Возраст: Рост: м");
Консольный ввод
Кроме вывода информации на консоль мы можем получать информацию с консоли. Для этого предназначен метод Console.ReadLine() . Он позволяет получить введенную строку.
Console.Write("Введите свое имя: "); string? name = Console.ReadLine(); Console.WriteLine($"Привет ");
В данном случае все, что вводит пользователь, с помощью метода Console.ReadLine() передается в переменную name.
Пример работы программы:
Введите свое имя: Том Привет Том
Особенностью метода Console.ReadLine() является то, что он может считать информацию с консоли только в виде строки. Кроме того, возможная ситуация, когда для метода Console.ReadLine не окажется доступных для считывания строк, то есть когда ему нечего считывать, он возвращаает значение null , то есть, грубо говоря, фактически отсутствие значения. И чтобы отразить эту ситуацию мы определяем переменную name , в которую получаем ввод с консоли, как переменную типа string? . Здесь string указывает, что переменная может хранить значения типа string, то есть строки. А знак вопроса ? указывает, что переменная также может хранить значение null , то есть по сути не иметь никакого значения. Далее мы более подробно разберем null и как с ним работать.
Однако, может возникнуть вопрос, как нам быть, если, допустим, мы хотим ввести возраст в переменную типа int или другую информацию в переменные типа double или decimal? По умолчанию платформа .NET предоставляет ряд методов, которые позволяют преобразовать различные значения к типам int, double и т.д. Некоторые из этих методов:
- Convert.ToInt32() (преобразует к типу int)
- Convert.ToDouble() (преобразует к типу double)
- Convert.ToDecimal() (преобразует к типу decimal)
Пример ввода значений:
Console.Write("Введите имя: "); string? name = Console.ReadLine(); Console.Write("Введите возраст: "); int age = Convert.ToInt32(Console.ReadLine()); Console.Write("Введите рост: "); double height = Convert.ToDouble(Console.ReadLine()); Console.Write("Введите размер зарплаты: "); decimal salary = Convert.ToDecimal(Console.ReadLine()); Console.WriteLine($"Имя: Возраст: Рост: м Зарплата: $");
При вводе важно учитывать текущую операционную систему. В одних культурах разделителем между целой и дробной частью является точка (США, Великобритания. ), в других — запятая (Россия, Германия. ). Например, если текущая ОС — русскоязычная, значит, надо вводить дробные числа с разделителем запятой. Если локализация англоязычная, значит, разделителем целой и дробной части при вводе будет точка.
Пример работы программы:
Введите имя: Том Введите возраст: 25 Введите рост: 1,75 Введите размер зарплаты: 300,67 Имя: Том Возраст: 25 Рост: 1,75м Зарплата: 300,67$
C#. Урок 3. Консольный ввод\вывод
![]()
Backend-разработка и создание утилит командной строки невозможно без консольного ввода\вывода. В рамках данной статьи будут рассмотрены методы класса Console для чтения и записи информации в консоль.
- Консольный ввод\вывод
- Класс Console. Вывод данных в консоль
- Метод Write
- Метод WriteLine
- Метод Read
- Метод ReadLine
- Метод ReadKey
Исходный код примеров из этой статьи можете скачать из нашего github-репозитория.
Консольный ввод\вывод
Все приложения условно можно разделить на две группы: консольные и с графическим интерфейсом пользователя. Ко второй группе относится большая часть приложений, с которыми работают пользователи в операционной системе Windows, на смартфонах и в вебе. Под консольными будем понимать приложения, которые запускаются через терминал (командную строку), их взаимодействие с пользователем происходит в текстовом режиме. Практически все приложения, которые запускаются на стороне сервера можно отнести к этой группе. Для организации ввода\вывода информации при работе с консолью в C# используется класс Console.
Класс Console. Вывод данных в консоль
Класс Console содержит методы для работы с консольным вводом\выводом, управлением потоком с ошибками и окном консоли. Начнем с вывода информации в консоль, для решения этой задачи класс Console предоставляет два метода: Write и WriteLine.
Для знакомства с методами класса Console создайте в удобном для вас каталоге проект с именем CSharpLesson3:
> dotnet new console -o CSharpLesson3
Метод Write
Метод Write – направляет в стандартный выходной поток текстовое представление переданного в него объекта. Дополнительно, предоставляет возможность задать форматирование.
Откройте файл Program.cs в созданном ранее проекте и добавьте в метод Main следующие строки, демонстрирующие работу с методом Write:
// Примеры работы с методом Write без форматирования Console.Write("Текущая дата: "); Console.Write(DateTime.Now); Console.Write("\n"); Console.Write($"Текущая дата: \n"); // Примеры работы с методом Write с использованием форматирования Console.Write("Текущая дата: \n", DateTime.Now); Console.Write("Число: \n", 123.456789);Более подробно про форматирование будет написано в уроке, посвященном работе со строками.
Сохраните документ, откройте консоль, перейдите в каталог с проектом и выполните команду:
> dotnet run
Результат работы программы будет выглядеть примерно следующим образом:
Текущая дата: 16.10.2020 11:48:28 Текущая дата: 16.10.2020 11:48:28 Текущая дата: 16.10.2020 11:48:28 Текущая дата: 1,234568E+002
Обратите внимание на первые три вызова метода Write, если не поставить символ перевода строки, то данные будут выдаваться в одну строку друг за другом, это не всегда удобно. Если требуется, чтобы вывод каждый раз осуществлялся с новой строки, то воспользуйтесь методом WriteLine.
Метод WriteLine
Метод WriteLine записывает указанные данные в выходной поток и добавляет символ перевода строки. Добавьте в программу следующие строки:
Console.WriteLine("Текущая дата: "); Console.WriteLine(DateTime.Now);Теперь надпись “Текущая дата:” и дата со временем будут выведены в разных строках.
WriteLine (также как Write) может принимать не только строковые значения, но и переменные разных типов:DateTime nowDate = DateTime.Now; string someText = "Сегодня"; int number = 924; Console.WriteLine(nowDate); Console.WriteLine(someText); Console.WriteLine(number);
Удобным и наглядным способом вывода значений переменных в консоль с дополнительным текстовым пояснением является использование строковой интерполяции:
Console.WriteLine($" . Число: ");
Запустите проект и в консоли увидите результат выполнения программы:
Сегодня 26.08.2020 11:53:44. Число: 924
Прием интерполяции позволяет внутри строки, используя фигурные скобки, указывать имена переменных, которые будут заменены значениями. Перед такой строкой ставится знак $.
Методы WriteLine и Write позволяют использовать форматирование:Console.WriteLine(":, Число: ", nowDate, someText, number);В этом случае методу передается ряд параметров, первый – это строка, в которой, в фигурных скобках, указывается порядок подстановки значений переменных, далее, через запятую, перечисляются переменные, значения которых нужно подставить, здесь важен порядок: нумерация начинается с 0.
Класс Console. Чтение данных из консоли
В классе Console, помимо рассмотренных выше методов вывода в консоль, присутствуют методы для считывания вводимых данных из консоли.
Метод Read
Метод Read возвращает числовой код последнего введенного символа во входном потоке, если символ введен не был, то будет возвращен код -1. Для завершения работы метода, после ввода символа необходимо нажать клавишу “Enter”. Рассмотрим работу с методом Read на примере:
Console.WriteLine("Нажмите любую клавишу, а затем Enter"); int key1 = Console.Read(); Console.WriteLine($"Код нажатой клавиши: "); Console.WriteLine("Символьное представление: " + Convert.ToChar(key1));Если после надписи “Нажмите любую клавишу, а затем Enter” будет введено более одного символа, то Read вернет только первый.
Для представления кода в виде символа необходимо переменную key1 привести к типу Char, для этого можно воспользоваться методом Convert.ToChar().
Метод ReadLine
Метод ReadLine возвращает введенную строку символов до нажатия клавиши “Enter”. Добавим несколько строк в файл с исходным кодом, для демонстрации работы с методом ReadLine :
Console.WriteLine("Введите ваше имя, а затем нажмите Enter"); string name = Console.ReadLine(); Console.WriteLine($"Привет, !");Если необходимо получить с консоли численные данные, то следует воспользоваться методами из класса Convert для приведения типа String к соответствующему числовому типу:
Console.WriteLine("Сколько вам лет?"); int age = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Ваш рост в см?"); int height = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Привет , вам уже полных лет и ваш рост см", name, age, height);Метод ReadKey
ReadKey возвращает объект класса ConsoleKeyInfo, в который помещается информация о нажатой клавише. Этот метод, как правило, используют для остановки выполнения программы или чтобы получить ответ от пользователя. Добавим строки для работы с ReadKey:
Console.WriteLine("Нажмите любую клавишу:"); var key2 = Console.ReadKey(); Console.WriteLine(key2.Key); Console.WriteLine(key2.KeyChar);Исходный код примеров из этой статьи можете скачать из нашего github-репозитория.
C# — научиться или умереть
После того долгого знакомства с переменными, этот урок может показаться быстрым и легким. Ну, в общем, ReadLine() — это еще один способ присвоить переменной значение.
Console.Write(\»Введите имя и нажмите Enter: \»); string name = Console.ReadLine(); Console.WriteLine(\»Привет, \» + name + \»!\»)
Фух! Миссия завершена! За три строки кода, мы запросили ввод, сохранили его и использовали. Вовсе не обязательно писать метод Write() перед ReadLine(), просто обычно надо каким-либо образом сказать пользователю, какой тип ввода мы ожидаем. Это просто вежливо.
Наверное, единственное затруднение — это то, что ReadLine() всегда возвращает данные строкового типа. Чтобы получить числа, надо опять же использовать методы классаConvert:
Console.Write(\»Введите свой возраст и нажмите Enter: \»); int age = Convert.ToInt32( Console.ReadLine() ); Console.Write(\»Введите свой рост и нажмите Enter (можно использовать дроби):\»); double height = Convert.ToDouble( Console.ReadLine() ); Console.WriteLine(\»Значицца, вам лет, а рост .\», age, height);
Надо запомнить, что без подобающего управления ошибками, программа будет выдавать ошибку каждый раз, когда мы будем пытаться конвертировать \»пингвин\»-а в число.
А что же с ReadLine() , который мы до сих пор ставили в конце каждой программы? Мы просто использовали преимущества системы ввода С#. Когда мы использовали ReadLine() в конце программы, мы заставляли С# терпеливо ждать, пока пользователь завершит ввод и нажмет ENTER. Когда ENTER нажат, программа собирает всю информацию, что ввел пользователь и . ничего с ней не делает, потому что мы не присваиваем значение никакой переменной. Поэтому С# остается только пожать плечами, забыть все, что ввел пользователь и продолжить работу. Ну разве не грех не использовать такую возможность?
В любом случае, ввод пользователя один из самых коварных аспектов программирования. Невозможно перечислить количество случаев, когда неожиданный ввод может привести программу к внезапному краху! Позже мы узнаем, как же все-таки управляться с глупостью некоторых пользователей, а пока надо запомнить: любая часть кода, которая зависит от внешних данных, будь то ввод с консоли, текстовый файл, или сетевой накопитель — это потенциальная опасность краха и с ней надо обращаться с должной осторожностью. Ну, что ж, самое время для примера кода:
using System; namespace C_ConsoleInput < class Class1 < [STAThread] static void Main(string[] args) < // Запросить имя пользователя Console.Write(\"Введите имя и нажмите Enter: \"); // Прочесть данные; присвоить значение переменной \"name\" string name = Console.ReadLine(); // \"name\" можно использовать как обычную переменную Console.WriteLine(\"Hello, \" + name + \"!\"); // Сделаем это снова, только теперь запросим тип пиццы Console.Write(\"Введите название пиццы и нажмите Enter: \"); string pizza = Console.ReadLine(); // А теперь используем обе переменные Console.WriteLine(\"Привет, ! Одна пицца на подходе!\", name, pizza); // Используем ReadLine() с численными типами Console.Write(\"Введите свой возраст и нажмите Enter: \"); int age = Convert.ToInt32( Console.ReadLine() ); Console.Write(\"Введите свой рост и нажмите Enter (можно использовать дроби): \"); double height = Convert.ToDouble( Console.ReadLine() ); Console.WriteLine(\"Значицца, вам лет, а рост .\", age, height); // А теперь попросим пользователя нажать \"Enter\" для выхода из программы Console.Write(\"Программа завершена. Нажмите \\\"Enter\\\" для выхода. \"); Console.ReadLine(); > > >Как в си шарп ввести с клавиатуры переменную
Доброго времени суток! В этом уроке мы поговорим о том, как получать данные от пользователя, это очень важный момент для любой компьютерной программы. В принципе, приложение может получать информацию от пользователя (или внешнего мира) разными способами, например, через графический интерфейс пользователя (через различные поля ввода и т.п.), читать из файла, принимать по сети от удаленного источника, ну или как в нашем случае – получать информацию, введенную пользователем с клавиатуры.
Помните, что получение информации от пользователя крайне важный момент, так как большинство ошибок в программах возникают из-за некорректных входных данных, а точнее, из-за недостаточной их обработки.
И так, к делу! Вспомним пример одного из предыдущих уроков, в котором мы в цикле, запрашивали информацию у пользователя, до тех пор, пока он не введет строку «выход». Вот фрагмент исходного кода:
//Переменная для хранения введенной строки string userString = ""; //Цикл с постусловием do < //Приглашение пользователю Console.Write("Введите любую строку и нажмите клавишу Enter: "); /* * Получение веденной с клавиатуры строки, * введенная строка сохраняется в переменную userString */ userString = Console.ReadLine(); //Вывод введенной строки Console.WriteLine("Пользователь ввел строку: " + userString); >while (userString != "выход");Получение информации с клавиатуры и сохранения этой информации в переменную заключается в одной лишь строке:
userString = Console.ReadLine();
Всё очень просто, после того как пользователь введет строку и нажмет на клавишу «Enter», информация окажется в переменной «userString». Но тут есть один нюанс, операция «Console.ReadLine();» (на самом деле, это вызов метода «ReadLine», класса «Console») возвращает как результат строку. Всё бы ничего, но на практике нам потребуется получать от пользователя не только строки, но и числа, например. Так что, нужно научиться преобразовывать строковые значения в численные. К счастью, в языке C# есть инструмент для преобразования типов. На практике, это выглядит примерно так:
//Получение строки string userString = Console.ReadLine(); //Преобразование строки в число (в тип int) int intValue = Convert.ToInt32(userString);
Для преобразования типов в C# можно использовать класс (позже я расскажу, что такое класс, а пока не забивайте себе голову этим) «Convert», у этого класса есть большое количество методов (функций – если хотите), так вот, метод «ToInt32» принимает один аргумент, в круглых скобках сразу после имени метода, в нашем случае, этот аргумент является строкой, которая и будет преобразована в число (если конечно такую строку можно будет преобразовать в число).
Теперь давайте напишем программу, которая запрашивает у пользователя сначала одно целое число, затем второе, а потом, выводит результат сложения этих чисел в консоль.
Создадим новый проект и напишем следующий код, в методе Main:
//Приглашение пользователю ввести первое число Console.Write("Введите первое число и нажмите клавишу Enter: "); //Получение первой строки string firstString = Console.ReadLine(); //Преобразование первой строки в число int firstArg = Convert.ToInt32(firstString); //Приглашение пользователю ввести второе число Console.Write("Введите второе число и нажмите клавишу Enter: "); //Получение второй строки string secondString = Console.ReadLine(); //Преобразование второй строки в число int secondArg = Convert.ToInt32(secondString); //Сложение двух переменных int result = firstArg + secondArg; //Вывод результата Console.WriteLine("Результат сложения введенных чисел: " + result.ToString()); /* * Обратите внимание на запись result.ToString(), * тут мы преобразовали число в строку, вызвав * метод ToString на переменной result! * Этой операцией мы будем пользоваться часто. */Обратите внимание на комментарий в самом конце кода! Там рассказывается как перевести число, обратно в строку.
А теперь соберите проект и запустите программу. Затем, введите какое-нибудь целое число (только целое и обязательно число!), например, 25 и нажмите клавишу Enter. Потом введите другое число (хотя, можно и тоже самое), например, 10 и нажмите Enter. В результате вы должны увидеть результат сложения этих чисел! Выглядеть это будет примерно так:

Результат выполнения программы
На этот раз хватит информации. В следующем уроке мы поговорим как обрабатывать ошибки во время выполнения программы. Например, те, которые могут возникнуть в приведенном выше примере, если пользователь введет не число, а простой текст! Но это уже тема следующего урока…
