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



C проверка на число

Автор Николай Фидченко задал вопрос в разделе Другие языки и технологии

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

Ответ от Connection terminated[гуру]
Для проверки ввода чисел в C++ функция atoi из библиотеки cstdlib применяется часто, но имеет серьезные ограничения. Она преобразует строку в целое число, но возвращает 0 как при ошибке преобразования, так и при вводе реального нуля. Также atoi останавливает чтение на первом нечисловом символе, поэтому ввод вида 123abc молча преобразуется в 123, что приводит к скрытым ошибкам. Чтобы избежать проблем, когда обычный cin читает только один параметр и оставляет остальные символы в буфере ввода, лучше использовать cin.getline для чтения всей строки целиком. После получения строки надежнее применять std::stoi, которая выбрасывает исключение при некорректных данных, или функцию strtol, позволяющую точно проверить, что преобразована вся строка, а не ее часть. Такой подход обеспечивает полноценный контроль над вводимыми данными.

Ответ от Ѐамиль Насибуллин[гуру]
Есть несколько вариантов (код писать не буду, т. к. С++ не знаю, объясню только логику) , итак:
1) Можно сделать запрет на ввод любых символов кроме цифр, запятой или точки. А запятую или точку чтоб можно было ввести не более одного раза. Т. е. эдакая проверка, срабатывающая на ввод символа, и отображающего только в случае если он разрешен. Тогда и пробел даже не введёшь.
2) Можно брать только первое число, если введены несколько через пробел. Т. е. написано вот для пользователя "введите число", пользователь вводит несколько чисел, программа берет только первое, а на остальные забивает, вот и всё.
3) Самое простое - сделай ввод числа не через текстовое поле, а через ползунок, который пользователь выставляет в нужное положение. Таким образом, и минимум-максимум строго ограничены, и число будет строго одним

Ответ от Serg Serg[гуру]
полная херня

Ответ от Ўрий-17[гуру]
#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<<" ";
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 << '
' << s;
}
}
k=atoi(s);
cout << "
Введён вариант № " << k << endl;
}

Ответ от ВикиВопрос[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: C++ Проверка правильности ввода данных.

какое различие между банком данных и базой данных?
Банк данных — это более широкое понятие, чем база данных. Он включает саму базу данных и систему
подробнее...

В каких случаях пишется ПОверка, а в каких ПРОверка?
Проверка — универсальное слово, обозначающее контроль, обследование или ревизию чего-либо и
подробнее...

Что такое тип данных?
Тип данных — это характеристика переменной, которая сообщает компьютеру, какую именно информацию
подробнее...

Что такое базы данных?
База данных — это упорядоченная совокупность информации, которая хранится в вычислительной системе
подробнее...

Что такое куча, стек и область данных на C/C++ ?
Куча — это область памяти, выделяемая и освобождаемая динамически во время работы программы.
подробнее...
Atoi на Википедии
Посмотрите статью на википедии про Atoi
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*