Я создаю продукт для проверки продукта, и я продолжаю сталкиваться с странной ошибкой. У меня есть центральное меню, которое вводит пользователя. После того, как функция завершит свою задачу, она возвращает пользователя обратно в меню. Однако для некоторых функций cin.get() у меня появляется после ошибок меню, и не будет принимать первую указанную команду. Вот соответствующие фрагменты кода:Нужна помощь в исправлении странного поведения cin
Основной цикл меню:
bool foreverLoopFlag = true;
while (foreverLoopFlag) {
cout << "\nC[heckout], R[eturn], S[tudent], P[roduct], Q[uit]. Choice? ";
cin.get(actionChoice);
std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
cout << endl;
actionChoice = toupper(actionChoice);
switch (actionChoice) {
case 'C':
checkoutSoftware(studentMap, productList);
break;
case 'R':
returnSoftware(studentMap, productList);
break;
case 'S':
studentDisplay(studentMap, productList);
break;
case 'P':
productDisplay(studentMap, productList);
break;
case 'Q':
foreverLoopFlag = false;
break;
default:
cout << "Invalid command.\n";
break;
}
}
функция проблем ребенка, studentDisplay:
void studentDisplay(map<string, Student> & studentMap, list<Product> & productList) {
string inputCLID;
cout << "Please enter student CLID: ";
cin >> inputCLID;
if (studentMap.find(inputCLID) != studentMap.end()) {
cout << "\nStudent: " << studentMap[inputCLID].name << " (" << inputCLID << ")\n";
cout << "\tBorrowed items: " << endl;
for (list<Student::LentProduct>::iterator it = studentMap[inputCLID].checkedOut.begin();
it != studentMap[inputCLID].checkedOut.end(); it++) {
cout << "\t\tProduct: " << (*it).name;
cout << "\tDue Date: " << (*it).dateDue << endl;
}
} else {
cout << "\nError: CLID not in database.\n";
}
}
Некоторые из отступа было искажено движется к SE, я принести извинения. Вот пример меня вопрос:
C[heckout], R[eturn], S[tudent], P[roduct], Q[uit]. Choice? s
Please enter student CLID: mrx8394
Student: Mark Xeno (mrx8394)
Borrowed items:
Product: Bluebeard Due Date: 12/14/2013
C[heckout], R[eturn], S[tudent], P[roduct], Q[uit]. Choice? c
Invalid command.
C[heckout], R[eturn], S[tudent], P[roduct], Q[uit]. Choice? q
Я попытался положить зЬй :: cin.flush() в начале меню петли, но это не сработало. Я попытался сделать std :: cin.ignore (std :: INT_MAX) в начале цикла меню, но это делает так, что меню никогда не появляется. Я также попытался зЬй :: cin.sync(), но это только делает бесконечный цикл этого:
C[heckout], R[eturn], S[tudent], P[roduct], Q[uit]. Choice?
Please enter a product to checkout:
Error: No such product.
Я понятия не имею, куда идти отсюда. Я знаю, что это, вероятно, просто какая-то причуда iostream, которую я не собираю. Любой помощник будет оценен по достоинству.
EDIT: У меня нет достаточной репутации, чтобы продвигать или комментировать конкретные ответы (все мои ревью на Math.SE !!!), поэтому я прокомментирую здесь. Решение Игоря-Тандетника отлично работало. Я переместил все остальное на линию, но я предполагаю, что этот парень просто остался в тасовании. Моя благодарность приходит толпами.
@qwrrty Хотя это может быть глупость, у меня была спецификация, чтобы встретиться (не просто любите курсы низкого уровня). Обычно я не прошу помочь отладку заданий, но это была последняя ошибка, и мои знания об iostream не так глубоки, но я знал, что кто-то здесь знает, что искажает состояние моего потока.
Еще раз спасибо ребятам, приветствую!