Top.Mail.Ru
Ответы

Что делает чертов cin.ignore(); в с++

короче все началось с того что я захотел сделать в с++ input() как в питон а там как, там этот инпут работает даже когда enter просто нажимаешь а в плюсах, там если энтр нажмешь то просто спускаешься нижена новую строчку, так вот нашел я ответ вроде это cin.ignore() он игнорит какой то поток(так чатгпт сказал) ну все типо разобрались что это почему если я его добовляю в код вот так

123456789101112131415161718
 #include <iostream> 
using namespace std; 
 
int main() { 
	setlocale(LC_ALL, "RU"); 
	int num = 45; 
	cout << "Переменная: " << num << endl; 
	num = -3; 
	cout << "Переменная: " << num << endl; 
	int a, b; 
	cout << "Введите переменную:"; 
	cin >> a; 
	cout << "Введите переменную:"; 
	cin >> b; 
	cout << "Переменные: " << a << ", " << b; 
	cin.ignore(); 
	cin.ignore(); 
} 

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

По дате
По рейтингу
Аватар пользователя
Новичок

ignore() без параметров удаляет один символ из соответствующего потока.
оператор >> вначале удаляет все пробельные символы пока не дойдет до нужного типа, считывает нужный тип, а все что было введено после него - остается в потоке.
Например если после второй переменной не сразу нажать энтер, а например нажать пробел и энтер - то в потоке останется два символа (пробел и \n).
Вообще можно посмотреть сколько символов осталось после ввода:

1
 cout << "В потоке осталось " << cin.rdbuf()->in_avail() << " символов"; 
Аватар пользователя
Мудрец

Ндаааааа...

12345678910111213141516171819
 #include <iostream> 
#include <string> 
 
std::string input( const char* msg ) 
{ 
    std::string s; 
    std::cout << msg; 
    std::getline( std::cin, s ); 
    return  s; 
} 
 
int main( int argc, char* argv[] ) 
{ 
    std::string str; 
    str = input("Введите строку: "); 
    std::cout << "Введена строка: '" << str << "'" << std::endl; 
    return  0; 
} 
 
Аватар пользователя
Просветленный

Потому что в конце строки в виндовс 2 символа. Это символ конца строки и символ перевода каретки. Поэтому 2 символа в потоке ввода надо игнорить.