Cin fail c что это

Cin fail c что это

Привет, это часть кода, который я написал. Цель этого кода состоит в том, чтобы ограничить пользователей вводами чисел, таких как 10,10,00 и т.д., Если они вводят такие значения, как (abc,! $ @И т.д.), Код попросит пользователей повторно ввести значения.

Чтобы выполнить эту функцию (ограничьте пользователя введенным действительным значением), я получаю несколько советов и руководств через форумы.

Я считаю своей обязанностью учиться и понимать, что делают эти коды. поскольку это первый раз, когда я использую этот код. может кто-нибудь коротко объяснить мне, что делают коды в строках 7, 9, 10 и 18? Особенно строка 10. Я получил краткое представление о других линиях только по строке 10 Я не знаю, что он сделал.

Спасибо за ваши гиды, я ценю это!

cin.fail() сообщает вам, что "что-то не удалось" в предыдущей операции ввода. Я верю, что есть четыре признанных состояния входного потока: bad , good , eof и fail (но fail и bad могут быть установлены одновременно).

cin.clear() сбрасывает состояние на good .

while(cin.get() != ‘
‘) ; будет считываться до конца текущей строки ввода.

cin.ignore(); будет пропустить до следующей новой строки, поэтому очень похож на while(cin.get() != ‘
‘); ,

Весь код должен также проверять конец файла или он будет зависать (цикл навсегда с ошибкой), если не задан правильный ввод, и ввод "завершен" (например, CTRL-Z или CTRL-D в зависимости от платформы).

//LINE 7: cin.fail() определяет, соответствует ли введенное значение значению, указанному в переменной.

//LINE 18: cin оставляет символ новой строки в потоке. Добавление cin.ignore() в следующую строку очищает/игнорирует новую строку из потока.

В строке 7 и строке 9 прочитайте документ.

в то while он проверяет, является ли строка cin.get() пустой строкой, т.е. содержит только новую строку.

Строка 7: проверьте правильность введенных данных (можно прочитать как decltype(value) ). cin.fail() всегда true если произошла некоторая ошибка с потоком. Позже

строка 9: вы очищаете состояние cin от плохого до предыдущего, нормального состояния. (восстановление после ошибки). Вы не можете читать данные до тех пор, пока не оправитесь от плохого состояния.

Строка 10: вы читаете до конца строки. В основном вы пропускаете одну строку с входа

Строка 18: эта строка выполняется только в случае исправления введенных данных. Он считывает и удаляет одну строку из stdin.

Стандартный поток ввода ( cin ) может выйти из строя по ряду причин.

Например, если value представляет собой int , и пользователь вводит большое число, например 124812471571258125 , cin >> value не будет выполнено, потому что число слишком велико, чтобы соответствовать внутри int .

Существует гораздо более простой способ сделать то, что вы хотите. Вы хотите, чтобы пользователь вводил только допустимые значения с плавающей запятой, например 10 или 10.00, но без символов, не так ли? Поэтому вы можете просто сделать это:

Читайте также:  Assassin s creed odyssey девушки

Это делает то же самое, что и ваш код, но гораздо проще.

Если вас интересует, что может привести к сбою cin , посмотрите здесь: http://www.cplusplus.com/forum/beginner/2957/

while (cin.get()! = ‘
‘): вся строка в c завершается нулем. Это означает, что
— это конец всех строковых объектов. Допустим, у вас есть строка "this" для c, это
, каждый алфавит хранится в типе char. Пожалуйста, прочитайте по адресу http://www.functionx.com/cpp/Lesson16.htm

cin.fail(): cin.fail() определяет, соответствует ли введенное значение значению, указанному в переменной.

cin.ignore(): извлекает символы из входной последовательности и отбрасывает их http://www.cplusplus.com/reference/istream/istream/ignore/

Я знаю, что в Qaru не так просто перечислять ссылки, поэтому я расскажу немного подробнее, но этот ответ действительно сводится к кучей ссылок.

Для строки 7 просто google cin.fail. Вот хорошая ссылка и то, что она говорит:

Возвращает true, если для потока (или обоих) установлены флажки с ошибкой или флагом ошибки.

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

failbit обычно устанавливается операцией, когда ошибка связана с внутренней логикой самой операции; возможны дальнейшие операции над потоком. В то время как badbit обычно устанавливается, когда ошибка связана с потерей целостности потока, которая, вероятно, сохранится, даже если в потоке будет предпринята другая операция. badbit может быть проверен независимо, вызвав функцию члена bad: один перевод строки: он сообщает вам, была ли непредвиденная ошибка при попытке прочитать входной поток.

Привет, это часть кода, который я написал.
Целью этого кода является ограничение пользователей на ввод чисел, таких как 10,10,00 и т. Д.,
если они вводят такие значения, как (abc,! $ @ и т. д.), код будет запрашивать у пользователей повторный ввод значений.

Чтобы выполнить эту функцию (запретить пользователю вводить действительные значения), я получаю несколько советов и руководств на форумах.

Я считаю, что я обязан изучать и понимать, что делают эти коды … так как я впервые использую этот код.
может кто-нибудь кратко объяснить мне, что делает коды в
Строка 7,9,10, а 18 сделать? Особенно строка 10. Я получил краткое представление о других, просто строка 10, я не знаю, что он сделал.

Спасибо за ваши гиды, я ценю это!

Решение

cin.fail() сообщает вам, «что-то не получилось» в предыдущей операции ввода. Я считаю, что есть четыре распознанных состояния входного потока: bad , good , eof а также fail (но fail а также bad может быть установлен одновременно, например).

cin.clear() сбрасывает состояние до good ,

while(cin.get() != ‘
‘) ; будет читать до конца текущей строки ввода.

cin.ignore(); будет пропускать до следующего перехода на новую строку, поэтому очень похож на while(cin.get() != ‘
‘); ,

Весь код должен также проверять конец файла, или он будет зависать (цикл навсегда с ошибкой), если не будет введен правильный ввод, а ввод «закончен» (например, CTRL-Z или CTRL-D в зависимости от платформы).

Читайте также:  Hyperx alloy elite обзор

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

// LINE 7: cin.fail () определяет, соответствует ли введенное значение значению, определенному в переменной.

// LINE 18: cin оставляет символ новой строки в потоке. Добавление cin.ignore () к следующей строке очищает / игнорирует новую строку из потока.

Для строки 7 и строки 9 прочитайте документ .

в while , проверяет ли линия cin.get() является пустой строкой, т.е. содержит только новую строку.

Строка 7: проверить правильность введенных данных (можно прочитать как decltype(value) ). cin.fail() всегда true если произошла ошибка с потоком. Позже

строка 9: вы очищаете cin состояние от плохого к предыдущему, нормальное состояние. (восстановить после ошибки). Вы не можете больше читать данные, пока не восстановитесь из плохого состояния.

Строка 10: вы читаете до конца строки. В основном вы пропускаете одну строку из ввода

Строка 18: эта строка выполняется, только если введенные данные исправлены. Он читает и отбрасывает одну строку из стандартного ввода.

while (cin.get ()! = ‘ n’): вся строка в c заканчивается нулем. Это означает, что n является концом всех строковых объектов. Допустим, у вас есть строка «this» для c именно this n, каждый алфавит хранится в типе char. Пожалуйста, прочитайте вместе
http://www.functionx.com/cpp/Lesson16.htm

cin.fail (): cin.fail () определяет, соответствует ли введенное значение значению, определенному в переменной.

cin.ignore (): извлекает символы из последовательности ввода и отбрасывает их
http://www.cplusplus.com/reference/istream/istream/ignore/

Я знаю, что в Stack Overflow не принято просто перечислять ссылки, поэтому я приведу немного больше деталей, но этот ответ действительно сводится к куче ссылок.

Для строки 7 просто гуглите cin.fail. Вот хорошая ссылка, и что это говорит:

Возвращает значение true, если для потока установлены флаги состояния сбоя или ошибки бита (или обоих).

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

failbit обычно устанавливается операцией, когда ошибка связана с внутренней логикой самой операции; дальнейшие операции в потоке могут быть возможны. В то время как badbit обычно устанавливается, когда ошибка влечет за собой потерю целостности потока, которая, вероятно, сохранится, даже если в потоке предпринята другая операция. Badbit можно проверить независимо, вызвав функцию-член bad:
Однострочный перевод: он сообщает, произошла ли непредвиденная ошибка при попытке чтения входного потока.

Вы можете найти похожие ссылки для cin.ignore , cin.clear а также cin.get . Краткое резюме:

cin.ignore — игнорировать один единственный символ, присутствующий в потоке.
cin.clear — очистить все флаги ошибок в потоке
cin.get — получить по одному персонажу за раз, пока вы не нажмете на новую строку ‘
‘ персонаж.

Стандартный поток ввода ( cin ) может потерпеть неудачу по ряду причин.

Читайте также:  Dns probe finished no internet windows

Например, если value является int и пользователь вводит большое число, как
124812471571258125 , cin >> value потерпит неудачу, потому что число слишком велико, чтобы поместиться в int ,

Существует гораздо более простой способ сделать то, что вы хотите. Вы хотите, чтобы пользователь вводил только допустимые значения с плавающей точкой, например, 10 или 10.00, но без символов, верно? Так что вы можете просто сделать это:

Это делает то же самое, что и ваш код, но гораздо проще.

В С++, как и в С, нет встроенных в язык средств ввода-вывода.

В С для этих целей используется библиотека stdio.h .
В С++ разработана новая библиотека ввода-вывода iostream , использующая концепцию объектно-ориентированного программирования:

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

  • cin стандартный входной поток ( stdin в С)
  • cout стандартный выходной поток ( stdout в С)
  • cerr стандартный поток вывода сообщений об ошибках ( stderr в С)

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

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

  • >> получить из входного потока
  • cout

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

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

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

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

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

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

Результат выполнения

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

Результат выполнения

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

Функцию — манипулятор потока можно включать в операции помещения в поток и извлечения из потока ( >).

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

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

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

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

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

Результат выполнения

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

Результат выполнения

Ссылка на основную публикацию
Adblock detector