Другие языки программирования и технологии

C++ Проверка правильности ввода данных.

Программа запрашивает меню, необходимо ввести числа от 1 до 20 для выбора пункта меню. Необходимо ограничить ввод неправильных данных. Организовал ввод в строку и перевод в число типа int через функцию atoi. Ограничил ввод символов и дробных чисел. Но если ввести более 1 числа через пробел, он обрабатывает их по одному и последовательно выполняет эти пункты меню. Строку же считывает не как одну, а разбивает на несколько, что между пробелами. Что можно сделать?

код:
char c[50];
while (1){
cout<<"Меню... ";
cin>>c;
menu=atoi(c);
if(Check(c,menu)) //функция проверки строки на целое число и проверка диапазона
{
switch(menu){....}
}
cin.getline(c, 50); вместо cin>>c попробуй.
т. к. ты указал только одну переменную, cin и читает один параметр ввода, оставляя остальные в буффере.
АР
Азат Ракишев
80 831
Лучший ответ
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
char c,s[3]={0,0,0};
int k=0;
for(;;)
{
while(!kbhit()); c=getch();
if(!c) c=getch();
if(c==13) if(atoi(s)) break;
if(c==0x08) if(k) s[--k]=0,cout<<"\b ";
if(k < 2)
{
if(k)
{
if(s[0]==48) if(c>=49&&c<57) s[k++]=c;
if(s[0]==49) if(c>=48&&c<57) s[k++]=c;
if(s[0]==50) if(c==48) s[k++]=c;
}
else
if(c >= 48&&c < 57) s[k++]=c;
cout << '\r' << s;
}
}
k=atoi(s);
cout << "\nВведён вариант № " << k << endl;
}
Есть несколько вариантов (код писать не буду, т. к. С++ не знаю, объясню только логику) , итак:

1) Можно сделать запрет на ввод любых символов кроме цифр, запятой или точки. А запятую или точку чтоб можно было ввести не более одного раза. Т. е. эдакая проверка, срабатывающая на ввод символа, и отображающего только в случае если он разрешен. Тогда и пробел даже не введёшь.

2) Можно брать только первое число, если введены несколько через пробел. Т. е. написано вот для пользователя "введите число", пользователь вводит несколько чисел, программа берет только первое, а на остальные забивает, вот и всё.

3) Самое простое - сделай ввод числа не через текстовое поле, а через ползунок, который пользователь выставляет в нужное положение. Таким образом, и минимум-максимум строго ограничены, и число будет строго одним
PC
Pavel Chevelyuk
1 943
полная херня