Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 1
Регистрация: 11.07.2017
Сообщений: 7
1

Обработка ввода данных

08.08.2017, 20:39. Показов 2248. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу часть программы, в которой нужно выбрать нужное действие (даётся список с соответствующим номером и нужно ввести номер нужной строки для выбора). И проблема в том, что я не знаю как лучше сделать эту программу выбора. Например, если сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
void actUser(){
   int num = 0;
   while(cin >> num) {
      if(num == 1 || num == 2 || num == 3) break;
   }
   switch (num) {
      case 1: /* link 1 */ break;
      case 2: /* link 1 */ break;
      case 3: /* link 1 */ break;
   }
}
То есть через переменную типа int, то сразу же при вводе не числа, например w, вылазит ошибка.
Если сделать через char:
C++
1
2
3
4
5
6
7
8
9
10
11
void actUser(){
   char symbol;
   while(cin >> symbol) {
      if(symbol == '1' || symbol == '2' || symbol == '3') break;
   }
   switch (symbol) {
      case '1': /* link 1 */ break;
      case '2': /* link 1 */ break;
      case '3': /* link 1 */ break;
   }
}
То если вводишь больше одного символа(не число), выйдут несколько лишних строк в консоли. A если несколько чисел (и будет там присутствовать хотя бы 1 нужное значение) пропустит, но будет выполнено правильно.
И вот мне надо, чтобы программа просчитывала все возможные вводы пользователя и работала правильно.
Надеюсь, вы меня поняли.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2017, 20:39
Ответы с готовыми решениями:

Обработка данных из потока ввода
Программа в консоли. На экране консоли происходят некоторые действия, в которые пользователь может...

Обработка данных во время ввода
Известны результаты двух спортсменов-пятиборцев в каждом из пяти видов спорта в баллах.Определить,...

Обработка ошибочного ввода данных
при вводе неверных цифр работает как положено но при вводе других символов (букв, например)...

Обработка данных во время ввода
Известны оценки по физике каждого из 20 учеников класса. Определить среднюю оценку.

2
243 / 268 / 219
Регистрация: 14.11.2016
Сообщений: 1,043
08.08.2017, 22:02 2
Вроде должно сработать Ну что-то типа такого
C++
1
2
3
4
5
6
7
8
9
10
11
12
void actUser() {
   char num = '\0';
   while(num = std::cin.get()) {
      switch (num) {
      case '1': /* link 1 */ break;
      case '2': /* link 1 */ break;
      case '3': /* link 1 */ break;
      default: continue;
      }
      break;
   }
}
1
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
09.08.2017, 04:00 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <limits>
 
enum class ACTION : int {
    ADD,
    DELETE,
    PRINT
};
 
void doAction(ACTION action)
{
    switch (action) {
    case ACTION::ADD:
        std::cout << "ADD" << std::endl;
        break;
    case ACTION::DELETE:
        std::cout << "DELETE" << std::endl;
        break;
    case ACTION::PRINT:
        std::cout << "PRINT" << std::endl;
        break;
    }
}
 
int main()
{
    do {
        int value;
        std::cin >> value;
        while (std::cin.fail() || value < int(ACTION::ADD) || value > int(ACTION::PRINT)) {
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cin >> value;
        }
 
        doAction(ACTION(value));
    } while (true);
}
1
09.08.2017, 04:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.08.2017, 04:00
Помогаю со студенческими работами здесь

Обработка данных сразу после ввода
Помогите пожалуйста с задачкой. Дано натуральное число n и действительные числа a1, a2, ..., an....

Обработка данных во время ввода с использованием вложенных циклов
Всем доброго времени суток! У меня возникла проблема, с реализацией в Delphi данной задачи....

Spring boot обработка данных после ввода в форму, вывод результата
Начал изучение Springboot, застрял на этапе когда данные из формы нужно передать в другой класс,...

Реализовать повтор ввода данных в программу или отказ от ввода
Программа должна вычислять произведение двух чисел и спрашивать завершать программу или нет, если...

Реализовать контроль ошибок ввода данных в поле, предназначенное для ввода времени
5.Реализовать в JavaScript контроль ошибок ввода данных в поле, предназначенное для ввода времени.

Реализовать контроль ошибок ввода данных в поле, предназначенное для ввода пароля
4.Реализовать в JavaScript контроль ошибок ввода данных в поле, предназначенное для ввода пароля.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru