Nano Hash - криптовалюты, майнинг, программирование

Как cin.clear() очищает входной буфер?

Из того, что я прочитал, cin.clear() сбрасывает флаги, но как это очищает входной буфер?

30.12.2013

  • Я думаю, что думаю, что очищает входной буфер iscin.ignore(numeric_limits<streamsize>::max(), '\n'). Однако он используется с cin.clear() для полного сброса cin. 08.07.2016

Ответы:


1

cin.clear() не влияет на входной буфер. Как вы правильно прочитали, он сбрасывает флаги iostate (технически заменяет их текущее значение на std::ios_base::goodbit)

30.12.2013
  • Можете ли вы объяснить, почему getline() пропущен после cin >> variable ? из-за `\n'? 16.01.2016
  • @UnKnown не пропускает, он делает именно то, для чего предназначен. См. раздел «Примечания» здесь en.cppreference.com/w/cpp/string/ basic_string/getline#Примечания 16.01.2016
  • означает, что он предназначен для чтения строки до тех пор, пока он не оштрафует '\ n', и поскольку он находит '\ n' последним Enter Pressed, поэтому он выполняется/пропускается? 16.01.2016

  • 2

    std::ios::clear() только сбрасывает флаги ошибок, если это возможно. Если, например, нет потокового буфера (т. е. stream.rdbuf() дает nullptr), std::ios_base::badbit по-прежнему остается установленным. Это единственный аффект. В частности, std::ios_base::clear() не удаляет никаких символов из входного буфера.

    Если вам нужно удалить символ из входного буфера, вам нужно сделать это явно. Например, вы можете использовать

    • stream.ignore();, чтобы безоговорочно удалить следующий символ (если он есть; если его нет, поток получит std::ios_base::eofbit набор).
    • stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); для удаления всех символов до первого встречающегося символа '\n' включительно.
    • вы можете захотеть ignore() символов, в то время как stream.peek() дает класс символов, который вам не нравится (например, пока isdigit(stream.peek()) дает false)
    30.12.2013
  • Почему getline() здесь пропущен? std::cin >> k; getline(std::cin,a); где k — целое число..!! я знаю, что это можно исправить с помощью cin.ignore();, но в чем причина сбоя? 16.01.2016
  • @Unknown: этот точный вопрос задавался и на него уже много раз отвечали (я знаю, потому что отвечал на него несколько раз): пожалуйста, узнайте, как искать в Stackoverflow! 16.01.2016
  • извините, я забыл добавить это. если k целое число, то проблема все равно \n вызвала? 16.01.2016
  • @Unknown: найди ответ на вопрос, пойми его, и ты сможешь ответить на свой вопрос! 16.01.2016

  • 3

    cin.clear() не очищает буфер, а только перезаписывает текущие значения флага. Для получения более подробной информации вы можете посетить эту ссылку--> http://www.cplusplus.com/reference/ios/ios/clear/

    И Вы можете найти хороший пример по этой ссылке -->http://web.eecs.utk.edu/~plank/plank/classes/cs102/Cin-Notes/

    30.12.2013

    4

    Действительно, cin.clear() не влияет на входной буфер, он только устанавливает новое значение для внутренних флагов состояния ошибки потока.

    Если вы хотите очистить символы, которые «сломали» вашу трансляцию, вы должны использовать cin.ignore() (например, cin.ignore(10000,'\n');)

    Вы можете найти хорошее объяснение с интуитивными примерами здесь: http://www.arachnoid.com/cpptutor/student1.html

    30.12.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..