2011-01-27 5 views
1

Я работал с числами (int, float, double, long, unsigned), но когда я помещал другого персонажа в консоль (например, ^[[A, или *). Поэтому моя программа сбойЗащита от несанкционированного ввода

Как я могу защитить свою программу от этого ошибочного ввода?

Примечание: Я знаю, что некоторые библиотеки функций, а именно isdigit или isallnum, но они не помогают так много

+0

можете ли вы опубликовать код о том, как вы вводите пользователя? – CharlesB

+0

Я беру ввод с помощью cin >> –

ответ

0

В C++ это можно сделать с помощью фильтрации данных через stringstream. Здесь обсуждается, как это сделать at Stanford's introductory C++ course site, с полным кодом для чтения целых чисел на стр. 19. Остальная часть главы также является хорошим ресурсом в целом для того, как делать ввод-вывод на C++, что также может быть полезно.

1

Способ сделать это как на C, так и на C++ - читать все входы в виде строк, а затем анализировать строку.

Это одна из причин, почему вы никогда не должны использовать scanf ("% d") или cin >> integer для любых других целей, кроме программ отладки/студента/хобби.

+1

, конечно, вы можете использовать 'std :: cin >> integer' для чтения целых чисел с консоли .. но вы не можете забыть правильную обработку ошибок. С другой стороны, правильная обработка ошибок невозможна для несходного ввода на 'scanf («% d »)' – smerlin

+2

простой обработке ошибок для std :: cin: 'if (! (Cin >> integerVar)) {cin.clear(); cin.ignore (numeric_limits :: max(), '\ n'); cout << "Недопустимый целочисленный ввод! \ n"; } ' – smerlin

+0

@ smerlin - это работает, но если вы введете что-то вроде 137abc, это будет неправильно считать, что вы ввели действительное число 137 и оставите abc в cin для чтения в следующем чтении cin без каких-либо подсказок. – templatetypedef

Смежные вопросы