Я чувствую, что вы были некоторыми отформатирован вводом ранее в вашей программе, то есть, это выглядит примерно так:
std::cin >> value;
do_something(value);
std::cout << "press enter to end\n";
std::cin.ignore();
Если это так, то у вас есть какой-то символ в буфере ввода с того времени, введено value
. Например, может быть '\n'
, но это могут быть и другие нечетные другие символы. Этот символ будет читаться, когда программа встречает std::cin.ignore()
.
Что вы, , вероятно, хотите, чтобы избавиться от символов, известных в настоящее время в буфере. Это не совсем то, что было бы сделано, поскольку это может все еще пропускать символы, которые уже введены, но еще не перенесены, но нет переносного подхода для очистки всех потенциальных символов (обычно это не проблема, потому что вряд ли какой-либо пользовательский интерфейс зависит от символьный ввод с терминала).
Чтобы игнорировать символы, которые, как известно, присутствует вам нужно начать с разрыва соединения между <stdio.h>
и IOStreams использованием std::ios_base::sync_with_stdio()
, а затем потреблять известные символы, введенные после последнего чтения, например,
#include <iostream>
int main()
{
std::ios_base::sync_with_stdio(false);
int x;
std::cin >> x;
std::cin.ignore(std::cin.rdbuf()->in_avail());
std::cout << "press enter\n";
std::cin.ignore();
}
Нечетный вызов sync_with_stdio()
необходим для того, чтобы IOStreams фактически буферизуют символы, полученные от системы, а не читают символы индивидуально. В качестве хорошего побочного эффекта это резко улучшает производительность при использовании std:cin
, std::cout
и других стандартных объектов потока.
Можете ли вы опубликовать более полный пример? У вас есть «возврат», который может помочь, но мы не можем сказать, что он возвращает * из *. –
Что такое "не работает"? – GManNickG
Что значит «это не работает»? Пожалуйста, объясни. – 0x499602D2