Этот вопрос закрыт для ответов, так как повторяет вопрос Как запретить ввод букв в C++?
@Noxilex

Как запретить ввод букв в C++?

#include <iostream>

using namespace std;

int main() {
  cout << "\t\t\tКалькулятор\n\n" << endl;
  cout << "Выберите операцию: " << "\n\n";
  int num1, num2, todo;
  cout << "1 - Сложение (+)\n" << "2 - Вычитание (-)\n" << "3 - Умножение (*)\n" << "4 - Деление (/)\n" << endl;
  cin >> todo;
  cout << endl;
  cout << "Введите первое число: " << endl;
  cin >> num1;
  cout << endl;
  cout << "Введите второе число: " << endl;
  cin >> num2;

  switch(todo) {
  case 1: {
    cout << "\nРезультат: " << num1 + num2 << "\n\n";
  } break;

  case 2: {
    cout << "\nРезультат: " <<  num1 - num2 << "\n\n";
  } break;

  case 3: {
    cout << "\nРезультат: " << num1 * num2 << "\n\n";
  } break;

  case 4: {
    cout << "\nРезультат: " << num1 / num2 << "\n\n";
  } break;
  }
}
  • Вопрос задан
  • 1883 просмотра
Ответы на вопрос 1
@res2001
Developer, ex-admin
На уровне стандартной библиотеки это не сделать, т.к. в std реализована определенная схема работы: ввод заканчивается нажатием Enter, до окончания ввода программа не контролирует входной поток, только затем все введенные символы передаются на обработку программе.
В простом варианте - читайте в строку, затем обрабатывайте каждый символ отдельно.

Но по уму вам нужно переводить терминал в "сырой" (raw) режим средствами ОС, в этом режиме появляется возможность обрабатывать каждую нажатую клавишу отдельно, не требуется подтверждение ввода Enterом и т.д. Но в работе в этом режиме std и ее стандартные объекты вам не помогут никак, нужно переходить на уровень ОС.
Можно поискать библиотеки, в которых реализован "сырой" ввод. Например в libuv это есть, но это кроме всего прочего еще и бибилотека ассинхронного ввода/вывода, что как бы добавляет сложностей.
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы