Что возвращает cin c

Использование возвращаемого значения cin для получения неизвестного количества входных данных в C ++

Рассмотрим проблему, когда нам нужно взять неизвестное количество целочисленных входных данных.

Типичным решением является запуск цикла и остановка, когда пользователь вводит определенное значение. Как это сделать, если нам не разрешено использовать if-else, switch-case и условный оператор.

Идея состоит в том, чтобы использовать тот факт, что ‘cin >> input’ ложно, если задано нечисловое значение. Обратите внимание, что вышеописанный подход сохраняется только в том случае, если тип данных входного значения int (целое число).

Важный момент: cin является объектом, если std :: istream. В C ++ 11 и более поздних версиях std :: istream имеет явную функцию преобразования bool () const; это означает, что существует допустимое преобразование из std :: istream в bool, но только там, где это явно требуется. If или while считается явным образом запрашивающим преобразование в bool. [Источник StackOVerflow ]
До C ++ 11 std :: istream имел преобразование в оператор void * () const;

// Программа CPP для получения неизвестного номера
// целых чисел от пользователя.
#include

using namespace std;

cout «To stop enter any character» ;

cout «\nEnter Your Input::» ;

// cin возвращает false, когда символ

cout «\nTotal number of inputs entered: «

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Источник

Ввод в языке C++ через cin

Использование объекта cin

Особенности считывания символов

Пусть дано время в формате HH:MM. Считать его можно следующим образом:

int h, m;
char c;
cin >> h >> c >> m;

Если установить манипулятор noskipws :

то при считывании символов пробельные символы не будут пропускаться. Для восстановления режима пропуска пробельных символов используется манипулятор skipws :

Особенности считывания строк

Строку целиком до конца строки, вместе с пробельными символами можно считать следующим образом:

Правильное решение будет таким:

int n;
string s, A[100];
cin >> n;
getline(cin, s);
for (int i = 0; i getline после считывания числа n. Дело в том, что cin >> n не считывает конец строки из потока, поэтому последующий вызов getline вернет пустую строку (но зато считает конец строки), поэтому нужно сделать один «холостой» вызов getline перед считыванием всех остальных строк.

Значение, возвращаемое при считывании

bool is_correct;
int a;
is_correct = (cin >> a);

Вместо записи результата в логическую переменную, можно непосредственно использовать его, например, в условной инструкции. Вот так, например, можно проверять, что на вход программе подано два числа через двоеточие:

string word;
while (cin >> word)
<
// Обработать слово в переменной word
>

Или считывание текста по строкам:

string line;
while (getline(cin, s))
<
// Обработать строку в переменной line
>

Источник

Как std :: cin может вернуть bool и себя одновременно?

Я читаю книгу на C ++, в которой говорится, что если я использую оператор >>, он возвращает объект слева от оператора, поэтому в этом примере

Но если я сделаю это

Мой код будет в цикле, пока не будет std::cin ошибка, так что это должно означать, что оператор возвращает bool это правда, когда std::cin не ошибается и ложь, когда std::cin выходит из строя.

Решение

[…] так что это должно означать, что оператор возвращает bool […]

Оператор преобразования в основном позволяет классу быть неявным (если он не помечен explicit ) для преобразования в данный тип. В этом случае, std::istream определяет его operator bool вернуть ли ошибку (обычно failbit ) произошло;

Другие решения

std::istream (класс, который std::cin является объектом) имеет следующую функцию-член:

Он возвращает false, если объект находится в состоянии ошибки, и true в противном случае. Вот почему while(std::cin >> value1) строительные работы. До C ++ 11 у него была эта неявная функция:

Который возвратил нулевой указатель, если объект находился в состоянии ошибки, служащем той же цели.

Операции над потоками возвращают ссылку на поток.

Вы можете вставить результат в if условие по той же причине, что вы можете сделать это:

И, в этом отношении, это:

И то и другое ptr а также x здесь может быть переоборудованный к bool для использования в состоянии. В случае std::cin конверсия достигается путем operator bool() в пределах std::ostream класс, который был явно (каламбур) добавлен для этой конкретной задачи.

std::cin имеет тип std::istream (который просто typedef из std::basic_istream )

std::basic_istream наследует operator bool() от своего родителя std::basic_ios

Источник

Поточный ввод-вывод в C++

Поточный ввод-вывод в C++ выполняется с помощью функций сторонних библиотек. В С++, как и в С, нет встроенных в язык средств ввода-вывода.

Библиотека iostream определяет три стандартных потока:

Для их использования в Microsoft Visual Studio необходимо прописать строку:

Для выполнения операций ввода-вывода переопределены две операции поразрядного сдвига:

Возможно многократное назначение потоков:
cout

Ввод информации

При этом из входного потока читается последовательность символов до пробела, затем эта последовательность преобразуется к типу идентификатора, и получаемое значение помещается в идентификатор:

Возможно многократное назначение потоков:
cin >> переменная1 >> переменная2 >>. >> переменнаяn;

При наборе данных на клавиатуре значения для такого оператора должны быть разделены символами (пробел, \n, \t ).

Особого внимания заслуживает ввод символьных строк. По умолчанию потоковый ввод cin вводит строку до пробела, символа табуляции или перевода строки.

Результат выполнения
Что возвращает cin c. 2018 04 19 23 12 08. Что возвращает cin c фото. Что возвращает cin c-2018 04 19 23 12 08. картинка Что возвращает cin c. картинка 2018 04 19 23 12 08. Рассмотрим проблему, когда нам нужно взять неизвестное количество целочисленных входных данных.

Для ввода текста до символа перевода строки используется манипулятор потока getline() :

Результат выполнения
Что возвращает cin c. 2018 04 19 23 14 46. Что возвращает cin c фото. Что возвращает cin c-2018 04 19 23 14 46. картинка Что возвращает cin c. картинка 2018 04 19 23 14 46. Рассмотрим проблему, когда нам нужно взять неизвестное количество целочисленных входных данных.

Манипуляторы потока

В С++ имеется ряд манипуляторов. Рассмотрим основные:

МанипуляторОписание
endlПомещение в выходной поток символа конца строки ‘\n’
decУстановка основания 10-ой системы счисления
octУстановка основания 8-ой системы счисления
hexУстановка основания 16-ой системы счисления
setbaseВывод базовой системы счисления
width(ширина)Устанавливает ширину поля вывода
fill(‘символ’)Заполняет пустые знакоместа значением символа
precision(точность)Устанавливает количество значащих цифр в числе (или после запятой) в зависимости от использования fixed
fixedПоказывает, что установленная точность относится к количеству знаков после запятой
showposПоказывает знак + для положительных чисел
scientificВыводит число в экспоненциальной форме
get()Ожидает ввода символа
getline(указатель, количество)Ожидает ввода строки символов. Максимальное количество символов ограничено полем количество

Пример Программа ввода-вывода значения переменной в C++

Та же программа, написанная на языке Си

Пример Использование форматированного вывода

Результат выполнения
Что возвращает cin c. 2018 04 19 23 19 24. Что возвращает cin c фото. Что возвращает cin c-2018 04 19 23 19 24. картинка Что возвращает cin c. картинка 2018 04 19 23 19 24. Рассмотрим проблему, когда нам нужно взять неизвестное количество целочисленных входных данных.

Еще один пример использования форматированного вывода: для t∈[0;3] с шагом 0,5 вычислить значение y=cos(t).

Результат выполнения
Что возвращает cin c. 2018 04 19 23 21 07. Что возвращает cin c фото. Что возвращает cin c-2018 04 19 23 21 07. картинка Что возвращает cin c. картинка 2018 04 19 23 21 07. Рассмотрим проблему, когда нам нужно взять неизвестное количество целочисленных входных данных.

Источник

1.5 – Знакомство с iostream: cout, cin и endl

Библиотека ввода/вывода

Библиотека ввода/вывода (библиотека io) является частью стандартной библиотеки C++, которая имеет дело с базовым вводом и выводом. Мы будем использовать функции этой библиотеки для получения ввода с клавиатуры и вывода данных в консоль. Буквы io в iostream означают «input/output» (ввод/вывод).

std::cout

Вспомним нашу программу Hello world :

std::cout может печатать не только текст, но и числа:

Это дает результат:

Его также можно использовать для вывода значений переменных:

Это дает результат:

Чтобы напечатать несколько элементов в одной строке, для объединения (связывания) нескольких частей выводимых данных, оператор вставки ( ) можно использовать несколько раз в одном выражении. Например:

Эта программа печатает:

Вот еще один пример, в котором мы печатаем и текст, и значение переменной в одном выражении:

Эта программа печатает:

std::endl

Как вы думаете, что напечатает следующая программа?

Результат может вас удивить:

Отдельные выражения вывода не приводят к отдельным выводимым строкам в консоли.

Если мы хотим выводить в консоль отдельные выводимые строки, нам нужно указать консоли, когда необходимо переместить курсор на следующую строку.

Совет

В приведенной выше программе второй std::endl технически не нужен, так как программа сразу же после этого завершается. Однако он служит двум полезным целям: во-первых, он помогает указать, что строка вывода является «законченной мыслью». Во-вторых, если мы позже захотим добавить дополнительные выражения вывода, нам не нужно будет изменять существующий код. Мы можем просто добавить новые выражения.

std::endl против ‘\n’

Вот пример, в котором ‘\n’ используется двумя разными способами:

Этот код напечатает:

Обратите внимание, что когда ‘\n’ используется сам по себе для перемещения курсора на следующую строку, необходимы одинарные кавычки. При встраивании в текст, который уже заключен в двойные кавычки, одинарные кавычки не нужны.

Мы рассмотрим, что такое ‘\n’ более подробно, когда перейдем к уроку о символах (4.11 – Символы).

Лучшая практика

Предупреждение

‘\n’ использует обратный слеш (как и все специальные символы в C++), а не прямой слеш. Использование прямого слеша (например, ‘/n’ ) может привести к неожиданному поведению.

std::cin

Если ваш экран закрывается сразу после ввода числа, обратитесь к уроку «0.8 – Несколько основных проблем C++» для решения этой проблем.

Лучшая практика

Существуют споры о том, нужно ли инициализировать переменную непосредственно перед тем, как передать ей значение, предоставленное пользователем, через другой источник (например, std::cin ), поскольку значение, предоставленное пользователем, просто перезапишет значение инициализации. В соответствии с нашей предыдущей рекомендацией о том, что переменные всегда следует инициализировать, лучше всего сначала инициализировать переменную.

Мы обсудим, как std::cin обрабатывает недопустимые входные данные в следующем уроке (7.16 – std::cin и обработка недопустимых входных данных).

Для продвинутых читателей

Резюме

Подробнее об операторах мы поговорим в уроке «1.9 – Знакомство с литералами и операторами».

Небольшой тест

Вопрос 1

Рассмотрим следующую программу, которую мы использовали выше:

Запустите эту программу несколько раз и опишите, что произойдет, если вместо этого вы введете следующие типы входных данных:

б) Число с дробной частью. Попробуйте числа с дробными составляющими меньше 0,5 и больше 0,5 (например, 3,2 и 3,7).

Дробная составляющая опущена.

Всё прекрасно работает.

г) Слово, например «Hello».

д) Действительно большое число (минимум 3 миллиарда).

Вы получаете, казалось бы, случайное число.

Последнее предложение может быть особенно неожиданным. Попробуйте! Это происходит потому, что x может содержать числа только до определенного размера. После этого он «переполняется». Мы обсудим переполнение в следующем уроке.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *