void EditProduct(product** edit_obj)
{
wcout << L"***Редактирование параметров продукта***" << endl;
int param_choice_edit;
bool flag;
do
{
flag = false;
!!! МЕНЮ !!!
wcout << L"Выберите параметр, который необходимо отредактировать" << endl;
wcout << L"1 - Редактировать название товара" << endl;
wcout << L"2 - Редактировать поставщика товара" << endl;
...............................................................
wcout << L"0 - Выход" << endl;
wcout << L"Пожалуйста сделайте выбор: ";
wcin >> param_choice_edit;
wcout << endl;
switch(param_choice_edit)
{
case 0: break;
case 1:
{ //Первый проблемный кейс
wstring new_name_product;
wcout << L"Введите новое имя товара: ";
wcin >> new_name_product;
(*edit_obj)->EditName(new_name_product);
wcin.clear();
wcout << L"*** Значение успешно обновлено ***" << endl;
}
break;
case 2:
{ //И второй
wstring new_producer_product;
wcout << L"Введите нового поставщика товара: ";
wcin >> new_producer_product;
(*edit_obj)->EditProducer(new_producer_product);
wcin.clear();
wcout << L"*** Значение успешно обновлено ***" << endl;
}
break;
..........................................
default:
{ //После ввода и изменения значения строки, выходим на меню, после чего в самый первый wcin просто пролетает и попадаем сюда
flag = YesNo(L"Введенное Вами значение некорректно. Желайте
повторить ввод[Y/N]: ");
// Функция YesNo() спрашивает пользователя строкой, которую мы ей передаем, и пользователь отвечает в wcin "Y/N", и в зависимости от этого функция вернут true или false
}
break;
}
if(param_choice_edit != 0 && flag == false)
{
flag = YesNo(L"Отредактировать еще одно значение выбранного параметра[Y/N]: ");
}
}while(param_choice_edit != 0 && flag );
}
wcin и wstring. Проблема
Столкнулся с такой проблемой: имею функцию редактирования, в которой создаю и заполняю с клавиатуры переменную типа wstring. Далее функция работает нормально до следующей инструкции wcin >> ..., которая просто пропускается, и соответственно программа выходит на обработку некорректно введенного значения и зацикливается. Поток чистить через wcin.clean() пробовал. Видимого результата это не принесло. К int'овскими переменными такой проблемы не наблюдается.
Вот код функции, в которой возникает проблема
Код:
Подскажите пожалуйста что это за глюк и как с ним бороться.
Пишу в VS 2008 на WinXP
В процессе танцев с бубном выяснил что это проявляется лишь когда во введенной строке содержаться знаки пробела(ов)
Цитата: Apach47
В процессе танцев с бубном выяснил что это проявляется лишь когда во введенной строке содержаться знаки пробела(ов)
Видимо всё дело в том, что символ пробела воспринимается как разделитель и при чтении из потока в строковую переменную считывается только первое слово (до пробела).
Upd: Используйте std::getline(std::cin, new_name_product);