Программа запрашивает меню, необходимо ввести числа от 1 до 20 для выбора пункта меню. Необходимо ограничить ввод неправильных данных. Организовал ввод в строку и перевод в число типа int через функцию atoi. Ограничил ввод символов и дробных чисел. Но если ввести более 1 числа через пробел, он обрабатывает их по одному и последовательно выполняет эти пункты меню. Строку же считывает не как одну, а разбивает на несколько, что между пробелами. Что можно сделать?
код:
char c[50];
while (1){
cout<<"Меню... ";
cin>>c;
menu=atoi(c);
if(Check(c,menu)) //функция проверки строки на целое число и проверка диапазона
{
switch(menu){....}
}
Другие языки программирования и технологии
C++ Проверка правильности ввода данных.
cin.getline(c, 50); вместо cin>>c попробуй.
т. к. ты указал только одну переменную, cin и читает один параметр ввода, оставляя остальные в буффере.
т. к. ты указал только одну переменную, cin и читает один параметр ввода, оставляя остальные в буффере.
#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;
}
#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) Самое простое - сделай ввод числа не через текстовое поле, а через ползунок, который пользователь выставляет в нужное положение. Таким образом, и минимум-максимум строго ограничены, и число будет строго одним
1) Можно сделать запрет на ввод любых символов кроме цифр, запятой или точки. А запятую или точку чтоб можно было ввести не более одного раза. Т. е. эдакая проверка, срабатывающая на ввод символа, и отображающего только в случае если он разрешен. Тогда и пробел даже не введёшь.
2) Можно брать только первое число, если введены несколько через пробел. Т. е. написано вот для пользователя "введите число", пользователь вводит несколько чисел, программа берет только первое, а на остальные забивает, вот и всё.
3) Самое простое - сделай ввод числа не через текстовое поле, а через ползунок, который пользователь выставляет в нужное положение. Таким образом, и минимум-максимум строго ограничены, и число будет строго одним
полная херня
Похожие вопросы
- Pascal : Как написать скрипт для проверки правильности введенных данных?
- Как реализовать проверку ввода данных на C++?
- Вычислить arth Есть ли формула для проверки правильности вычисления .и правильный ли код?
- Процедуры в PascalABC.NET. Ввод данных
- Учу C++! Уже знаю: типы данных, циклы. условия, привидения и т. д учу 5дней. вот программа! Как норм за 5 дней?
- Как написать свою программу для ввода данных, чтоб потом эти данные сохранялись в определённом тхт файле
- У кого есть PHPскрипт, проверки правильности написания № сотового при регции на Вашем сайте?Иногда чушь всякую пишут
- Java ввод данных из консоли
- Напишите пожалуйста функцию обмена значений двух переменных на си (не c++) для любого типа данных
- C++. Работа с символьными данными. Напишите пожалуйста