Ввод и вывод в консоли
Последнее обновление: 14.02.2023
По умолчанию язык C++ не содержит встроенных средств для ввода с консоли и вывода на консоль, эти средства предоставляются библиотекой iostream. В ней определены два типа: istream и ostream. istream представляет поток ввода, а ostream — поток вывода.
Вообще, сам термин «поток» в данном случае представляет последовательность символов, которая записывается на устройство ввода-вывода или считывается с него. И в данном случае под устройством ввода-вывода рассматривается консоль.
Для записи или вывода символов на консоль применяется объект cout, который представляет тип ostream. А для чтения с консоли используется объект cin
Для использования этих объектов в начало исходного файла необходимо подключить библиотеку iostream:
#include <iostream>
Вывод на консоль
Для вывода на консоль применяется оператор <<. Этот оператор получает два операнда. Левый операнд представляет объект типа ostream, в данном случае объект cout.
Так как оператор << возвращает левый операнд — cout, то с помощью цепочки операторов мы можем передать на консоль несколько значений. Например, определим простейшую программу вывода на консоль:
#include <iostream> int main() { int age {33}; double weight {81.23}; std::cout << "Name: " << "Tom" << "\n"; std::cout << "Age: " << age << std::endl; std::cout << "Weight: " << weight << std::endl; }
Консольный вывод программы:
Name: Tom Age: 33 Weight: 81.23
Оператору << передаются различные значения — строки, значения переменных, которые выводятся на консоль.
Строки могут содержать управляющие последовательности, которые интерпретируются определенным образом. Например, последовательность «\n» интерпретируется как перевод на новую строку.
Из других управляющих последовательностей также нередко употребляется «\t», которая интерпретируется как табуляция.Также цепочку операторов << можно завершать значением std::endl, которое вызывает перевод на новую строку и сброс буфера. При выводе в поток данные вначале помещаются в буфер. И сброс буфера гарантирует, что все переданные для вывода на консоль данные немедленно будут выведены на консоль.
Ввод с консоли
Для считывания с консоли данных применяется оператор ввода >>, который принимает два операнда. Левый операнд представляет объект типа istream (в данном случае объект cin), с которого производится считывание, а правый операнд — объект, в который считываются данные.
Например, считаем данные с консоли:
#include <iostream> int main() { int age; double weight; std::cout << "Input age: "; std::cin >> age; std::cout << "Input weight: "; std::cin >> weight; std::cout << "Age: " << age << "\t Weight: " << weight << std::endl; }
Здесь после приглашений к вводу программа ожидает ввода значений для переменных age и weight.
Пример работы программы:
Input age: 32 Input weight: 67.45 Age: 32 Weight: 67.45
Стоит отметить, что так как оператор ввода в первом случае будет добавлять данные в целочисленную переменную age, то он ожидает ввода числа. В случае с переменной weight оператор ввода ожидает число с плавающей точкой, причем разделителем целой и дробной части должна быть точка. Поэтому мы не можем ввести любые значения, например, строки. В этом случае программа может выдать некорректный результат.
Оператор ввода >> возвращает левый операнд — объект cin, поэтому мы можем по цепочке считывать данные в различные переменные:
#include <iostream> int main() { int age; double weight; std::cout << "Input age and weight: "; std::cin >> age >> weight; std::cout << "Age: " << age << "\t Weight: " << weight << std::endl; return 0; }
Пример работы программы:
Input age and weight: 32 67. 45 Age: 32 Weight: 67.45
После ввода одного из значений надо будет ввести пробел и затем вводить следующее значение.
НазадСодержаниеВперед
Методы ввода и вывода — Windows Console
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
Существует два разных подхода к вводу-выводу в консоль, выбор которых зависит от того, насколько гибка и контролируется потребность в приложении.
Высокоуровневый подход обеспечивает простой потоковый ввод-вывод, но ограничивает доступ к входным и экранным буферам консоли. Для низкоуровневого подхода требуется, чтобы разработчики записывали больше кода и выбрали более широкий спектр функций, но это также предоставляет приложению большую гибкость.Примечание
Подход низкого уровня не рекомендуется для новой и текущей разработки. Приложениям, которым требуются функциональные возможности низкоуровневых функций консольного ввода-вывода, рекомендуется использовать Виртуальные последовательности и исследовать документацию по классическим функциям и виртуальному терминалу , а также к стратегии экосистемы.
Приложение может использовать функции файлового ввода-вывода, ReadFile и WriteFile, а также консольные функции реадконсоле
Низкоуровневые функции ввода-вывода предоставляют прямой доступ к входным и экранным буферам консоли, позволяя приложению обращаться к событиям ввода и изменения размера буфера мыши, а также расширенной информации для событий клавиатуры. Низкоуровневые функции вывода позволяют приложению считывать или записывать данные в указанное число последовательных символьных ячеек в буфере экрана, а также читать или записывать в прямоугольные блоки символьных ячеек в указанном месте в буфере экрана. Входные режимы консоли влияют на вход низкого уровня, позволяя приложению определить, помещаются ли в входной буфер события, связанные с мышью и изменением размера буфера.
Режимы вывода консоли не влияют на выходные данные низкого уровня.Методы ввода-вывода высокого и нижнего уровней не являются взаимоисключающими, и приложение может использовать любое сочетание этих функций. Однако, как правило, приложение использует один и тот же подход, и мы рекомендуем сосредоточиться на одной конкретной парадигме для достижения оптимальных результатов.
Совет
Идеальное приложение для прямого просмотра будет сосредоточиться на высокоуровневых методах и дополнять дополнительные потребности с помощью виртуальных последовательностей
В следующих разделах описываются режимы консоли и функции ввода-вывода высокого уровня и низкого уровня.
- Консольные режимы
- Высокоуровневая консольная операция ввода-вывода
- Высокоуровневые режимы консоли
- Высокоуровневые входные и выходные функции консоли
- Последовательности виртуального терминала в консоли
- Классические функции и виртуальные последовательности терминалов
- Стратегия развития экосистемы
- Низкоуровневые консольные операции ввода-вывода
- Низкоуровневые режимы консоли
- Низкоуровневые функции ввода в консоль
- Низкоуровневые функции вывода консоли
Как читать пользовательский ввод из командной строки в Go
Существует несколько способов чтения пользовательского ввода из консоли терминала в Go.
Давайте рассмотрим три основных сценария, с которыми вы, вероятно, столкнетесь при разработке CLI в Go.Прочитать одну строку текста
Если все, что вам нужно сделать, это принять одно слово или короткое предложение от пользователя, вам может пригодиться метод bufio.Reader.ReadString. Вот как это использовать:
пакет основной Импортировать ( "буфио" "ФМТ" "Операционные системы" "струны" ) основная функция () { fmt.Print("Введите текст: ") читатель: = bufio.NewReader(os.Stdin) // ReadString будет блокироваться до тех пор, пока не будет введен разделитель ввод, ошибка := reader.ReadString('\n') если ошибка != ноль { fmt.Println("Произошла ошибка при чтении ввода. Повторите попытку", ошибка) возвращаться } // удаляем разделитель из строки ввод = строки.TrimSuffix (ввод, "\n") fmt.Println(ввод) }
Метод bufio.NewReader()
io.Reader
. os.Stdin
реализует этот интерфейс и представляет собой открытый файл, который указывает на стандартный дескриптор входного файла. Этот метод возвращает структуру bufio.Reader, которая имеет метод с именем ReadString()
, использованный выше. Метод ReadString()
принимает разделитель (в данном случае символ новой строки \n
, который будет добавлен, если пользователь нажмет клавишу Enter) и считывает ввод пользователя до первого появления разделителя в строке . После этого возвращаются два значения: строка, содержащая данные до разделителя включительно, и ошибка (если есть).
После обработки ошибки необходимо удалить разделитель из пользовательского ввода. Метод strings.TrimSuffix()
заботится об этом, оставляя нам именно то, что ввел пользователь.
Чтение нескольких строк текста
Чтобы прочитать несколько строк текста, используйте метод bufio.NewScanner() , как показано ниже:
пакет основной Импортировать ( "буфио" "ФМТ" "Операционные системы" ) основная функция () { сканер: = bufio. NewScanner(os.Stdin) для { fmt.Print("Введите текст: ") // считывает пользовательский ввод до \n по умолчанию сканер.Сканировать() // Содержит отсканированную строку текст := сканер.Текст() если длина (текст) != 0 { fmt.Println(текст) } еще { // выходим, если пользователь ввел пустую строку перерыв } } // обработка ошибки если scan.Err() != ноль { fmt.Println("Ошибка: ", сканер.Err()) } }
Метод NewScanner()
также принимает io.Reader
и возвращает новый сканер для чтения из устройства чтения. Каждый раз, когда вызывается scan.Scan()
, программа блокируется до тех пор, пока пользователь не введет новую строку текста. По умолчанию сканер будет потреблять текст до тех пор, пока не будет достигнут символ новой строки, но это можно настроить с помощью метода scan.Split.
Текст, введенный пользователем, может быть получен с помощью сканера . Text()
. Вы можете распечатать его на экране, как мы сделали выше, или сохранить где-нибудь, например, в виде фрагмента строк. Если введена пустая строка, цикл for завершится.
Метод scan.Err()
возвращает первую ошибку, отличную от EOF, обнаруженную сканером. Обязательно обработайте эту ошибку надлежащим образом, прежде чем приступать к остальной логике вашей программы.
Если вы запустите приведенный выше код, вы получите следующий вывод:
$ запустить main.go Введите текст: Испания Испания Введите текст: Франция Франция Введите текст: Германия Германия Введите текст:
Вы также можете использовать этот метод для чтения только одного лайка текста. Кода ниже будет достаточно для этой цели:
пакет основной Импортировать ( "буфио" "ФМТ" "Операционные системы" ) основная функция () { сканер: = bufio.NewScanner(os.Stdin) fmt.Print("Введите текст: ") сканер.Сканировать() fmt.Println(сканер.Текст()) если scan.Err() != ноль { fmt.Println("Ошибка: ", сканер.Err()) } }
Чтение одного символа в кодировке UTF-8
Если вам нужен только один символ, вы можете использовать метод bufio. Reader.ReadRune. Даже если пользователь вводит более одного символа, учитывается только первый, а все остальные игнорируются.
пакет основной Импортировать ( "буфио" "ФМТ" "Операционные системы" ) основная функция () { читатель: = bufio.NewReader(os.Stdin) символ, _, ошибка := читатель.ReadRune() если ошибка != ноль { fmt.Println(ошибка) } // печатает кодовую точку юникода символа fmt.Println(char) }
Заключение
Как видите, чтение пользовательского ввода с консоли терминала может осуществляться несколькими способами в зависимости от ваших потребностей. Приведенные выше примеры должны охватывать наиболее распространенные варианты использования. Не стесняйтесь углубляться в документацию, если то, что я предоставил выше, не соответствует вашим потребностям.
Спасибо за прочтение и удачного кодирования!
- #голанг
Read-Host (Microsoft.PowerShell.Utility) — PowerShell | Microsoft Узнайте
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Артикул
- Модуль:
- Microsoft. PowerShell.Утилита
Считывает строку ввода с консоли.
Синтаксис
Чтение-хост [[-Подсказка] <Объект>] [-MaskInput] []
Чтение-хост [[-Подсказка] <Объект>] [-AsSecureString] [<Общие параметры>]
Описание
Командлет Read-Host
считывает строку ввода с консоли (stdin). Вы можете использовать его, чтобы подсказать
пользователя для ввода. Поскольку вы можете сохранить ввод в виде защищенной строки, вы можете использовать этот командлет для запроса
пользователей для безопасных данных, таких как пароли.
Примечание
Read-Host
имеет ограничение в 1022 символа, которые он может принять в качестве ввода от пользователя.
Примеры
Пример 1: Сохранение ввода консоли в переменную
В этом примере отображается строка «Пожалуйста, введите ваш возраст:» в качестве подсказки. Когда значение введено и
нажата клавиша Enter, значение сохраняется в Переменная $Age
.
$Age = Read-Host "Пожалуйста, введите свой возраст"
Пример 2. Сохранение ввода с консоли в виде защищенной строки
В этом примере отображается строка «Введите пароль:» в качестве подсказки. По мере ввода значения
звездочки ( *
) появляются в консоли вместо ввода. При нажатии клавиши Enter появляется
значение сохраняется как объект SecureString в переменной $pwd_secure_string
.
$pwd_secure_string = Read-Host "Введите пароль" -AsSecureString
Пример 3: Ввод маски и в виде строки открытого текста
В этом примере отображается строка «Введите пароль:» в качестве подсказки. По мере ввода значения
звездочки ( *
) появляются в консоли вместо ввода. При нажатии клавиши Enter появляется
значение хранится в виде открытого текста String объекта в переменной $pwd_string
.
$pwd_string = Read-Host "Введите пароль" -MaskInput
Параметры
-AsSecureString
-MaskInput
-Prompt
Вводы
Нет
Вы не можете передать объекты этому командлету.