C++ input / output (getchar)

226
22 апреля 2022, 18:40
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. (Как это исправить?)

Answer 1

Всё дело в том, что после того, как cin прочитает число, он оставит в потоке ввода символ новой строки (который Вы создаёте, когда нажимаете Enter после ввода числа). Потом функция getchar читает этот символ новой строки (\n) и сохраняет результат в переменную ch, которая имеет тип int. Если заглянуть в ASCII таблицу, то можно увидеть, что символ новой строки имеет код 10, что Вы и наблюдаете в выводе переменной ch. Вы видите именно 10, потому что ch имеет тип int и cout отображает содержимое переменной в виде числа, а не символа.
Чтобы исправить ситуацию, Вам необходимо после ввода числа также прочитать всё до конца строки (т.е. до символа \n). Это можно сделать с помощью строки

cin.ignore(numeric_limits<streamsize>::max(), '\n');

Ещё, в виде рекомендации, вместо getchar() лучше использовать cin.get().

READ ALSO
Как поставить библиотеку в С++?

Как поставить библиотеку в С++?

Я пришёл с питона несколько дней назад, и для своих задач я использовал только opencvИ вот тут я захотел попробовать C++ и как бы смешно не было,...

291
Кодировка ASCII в Xcode

Кодировка ASCII в Xcode

В Xcode при вводе русского символа в переменную типа char, если сразу же вывести эту самую переменную, выводит \320 или что-то похожее

130
Объединить python(gui) и C++

Объединить python(gui) и C++

У меня есть программа которая работает с файлами, все готово кроме интерфейса, я бы его спокойно могла бы доделать на C++, но сроки поджимаютМожно...

146