Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

C++. Проверка на некорректный ввод.

X4 Canal Знаток (394), закрыт 7 лет назад
Как сделать проверку на ввод целочисленной переменной? Что бы, если я, например, когда ввожу rdt45, что бы у меня программа не зависала.
Дополнен 7 лет назад
Всем спасибо, но нужно сделать без строк. Со строками я и сам знаю как сделать.
Лучший ответ
JesKei Мастер (2372) 7 лет назад
int i;
do {
if (!(cin >> i)) {
cin.clear();
while (cin.get() != '\n');
continue;
}
cin.ignore(cin.rdbuf()->in_avail());
break;
} while (true);
X4 CanalЗнаток (394) 7 лет назад
Что то сложно сильно. Мы такое еще не проходили. Наверно.
Можете объяснить как работает код? И что и как он проверяет.
JesKei Мастер (2372) Что вы сейчас изучаете? Уже дошли до ооп, или все еще на процедурном программировании? Я читала ваш комментарий к предыдущему ответу. Если задали проверку без строки - значит вы уже учите ооп. Иначе быть не может. Но, если методы используемые в моем примере и сам алгоритм действий вам не понятны, значит вы либо еще не учите ооп, либо плохо его учите. Хотя, может быть ваш преподаватель имел ввиду такую запись: int i; while (!(cin >> i)); Но это не правильная проверка. Потому что, запись вида 45rty такая проверка пропустит. 45 присвоится переменной, а rty останется "висеть" в потоке, что не есть правильно, потому что при следующей работе с потоком, эти данные пойдут в работу.
Остальные ответы
Высший разум (1270989) 7 лет назад
Считывай в строковую переменную, а там уже смотри что ввели.
X4 CanalЗнаток (394) 7 лет назад
С вводом в строку я умею делать проверку. А без строк как проверить?
Я у препода спросил на счет проверки со строкой. Он сказал, попробуйте сделать без строки.
Demon On Wheels Просветленный (30522) 7 лет назад
std::string str;

std::cin >> str;

//всё. далее можно проверять что там за символы в строке
std::size_t sz = str.size();
for(size_t i = 0; i < sz; ++i){
if( is_alpha(str[ i ]) ) std::cout << str[ i ] << " - это буква\n";
}

ещё проще сделать так
int i = atoi(str.data());

если в строке есть буквы то i будет равно 0
если нет то в i будет целочисленное значение введённое с клавиатуры
X4 CanalЗнаток (394) 7 лет назад
Нужно сделать без строк.
X4 CanalЗнаток (394) 7 лет назад
Но все равно спасибо.
Сергей Жаков Мудрец (16208) 7 лет назад
#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
int i = 0;
i =getch();

if( isdigit(i )!= 0 )
cout <<"цифра = " << (char)i << endl;
else
cout << "ошибка символ = " << (char)i << endl;

return 0;
}
Похожие вопросы