Что делает чертов cin.ignore(); в с++
короче все началось с того что я захотел сделать в с++ input() как в питон а там как, там этот инпут работает даже когда enter просто нажимаешь а в плюсах, там если энтр нажмешь то просто спускаешься нижена новую строчку, так вот нашел я ответ вроде это cin.ignore() он игнорит какой то поток(так чатгпт сказал) ну все типо разобрались что это почему если я его добовляю в код вот так
#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).
Вообще можно посмотреть сколько символов осталось после ввода:
cout << "В потоке осталось " << cin.rdbuf()->in_avail() << " символов";
Ндаааааа...
#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 символа в потоке ввода надо игнорить.