int show_menu()
{
std::cout << "\n\n1.Строка\n2.Число\n3.Число с плавающей точкой\n4.Число с плавающей точкой двойной точности\n5.Символ"<< std::endl;
std::cout << "Введите цифру: ";
int menu_choice;
std::cin >> menu_choice;
return menu_choice;
}
int menu_choice = show_menu();
отрывок из main()
case 5:
{
std::cout << "\nВведите символ: ";
int ch = getchar();
std::cout << "Вввели: " << ch << "\tРезультат ---> ";
for (int i = 7; i >= 0; i--)
{
std::cout << ((ch >> i) & 1);
}
end_work = '-';
break;
}
Консоль:
Не очень понимаю, что происходит, почему в переменную ch передаётся результат функции, а не происходит ввод от пользователя. То есть мы в show_menu() в cin ввели к примеру 5 и это же перенеслось в переменную сh. (Как это исправить?)
Всё дело в том, что после того, как cin
прочитает число, он оставит в потоке ввода символ новой строки (который Вы создаёте, когда нажимаете Enter после ввода числа). Потом функция getchar
читает этот символ новой строки (\n
) и сохраняет результат в переменную ch
, которая имеет тип int
. Если заглянуть в ASCII таблицу, то можно увидеть, что символ новой строки имеет код 10, что Вы и наблюдаете в выводе переменной ch
. Вы видите именно 10, потому что ch
имеет тип int
и cout
отображает содержимое переменной в виде числа, а не символа.
Чтобы исправить ситуацию, Вам необходимо после ввода числа также прочитать всё до конца строки (т.е. до символа \n
). Это можно сделать с помощью строки
cin.ignore(numeric_limits<streamsize>::max(), '\n');
Ещё, в виде рекомендации, вместо getchar()
лучше использовать cin.get()
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я пришёл с питона несколько дней назад, и для своих задач я использовал только opencvИ вот тут я захотел попробовать C++ и как бы смешно не было,...
В Xcode при вводе русского символа в переменную типа char, если сразу же вывести эту самую переменную, выводит \320 или что-то похожее
У меня есть программа которая работает с файлами, все готово кроме интерфейса, я бы его спокойно могла бы доделать на C++, но сроки поджимаютМожно...