ticket;
cout << "Enter a win number: ";
int win; cin >> win;
for (int i = 0; i < 3; i++) {
cout << "Enter a string and a number: " << endl;
string str; int num;
getline(cin, str);
cin >> num;
ticket.push_back(make_pair(str, num));
}
for (auto& s : ticket) cout << s.first << ", " << s.second << endl;
После ввода первой строки в getline(cin, str) почему-то запрос на ввод следующих данных не поступает, и код завершается. Почему так происходит?
Возможно, в cin идёт символ переноса строки
Попробуйте cin.ignore(256, '\n') перед getline()
Все равно какая-то фигня получается. Он запрашивает почему-то 4 раза, хотя в каждой итерации всего 2 запроса, а потом код завершает
Enter a string and a number: sdf 3 3 df Enter a string and a number: Enter a string and a number: 3, 0 , 0 , 0 вот так выходит
Нужно каждый раз в цикле это делать
Чтобы просто ввести строку, а потом int и перейти к следующей итерации, что мне нужно сделать?
for (int i = 0; i < 3; i++) { cout << "Enter a string: " << endl; cin.ignore(256, '\n'); string str; int num; getline(cin, str); cout << "Enter a number: " << endl; cin >> num; ticket.push_back(make_pair(str, num)); }
Сделал точно так же, но опять следующая фигня: Enter a string: sdf 3 Enter a number: wer Enter a string: Enter a number: Enter a string: Enter a number: 3, 0 , 0 , 0
Так а чего вы строку вместо числа вводите
После getline попробуй добавит getchar()
гетлайн прогламтывает перенос строки тоже. https://en.cppreference.com/w/cpp/string/basic_string/getline b) the next available input character is delim, as tested by Traits::eq(c, delim), in which case the delimiter character is extracted from input, but is not appended to str.
О, спасибо, буду знать)
Обсуждают сегодня