как можно с помощью исключений контолировать достоверность ввода элементов по типуи выход за границы типа при вводе?
как можно с помощью исключений контолировать достоверность ввода элементов по типуи выход за границы типа при вводе?
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
11 декабря 2008 в 22:00
в лабе стояло условие проверять с помощью эксепшнов,вот я и парился, так бы написал полегче) мне смешно,что главная тема лабы была дерево поиска, а заюзание экспешна шло как основное задание для всех.дерево и все методы быстро написал, а с этой хней 2 ночи разбирался)
Влад Ламбар, спс за идею, седня все успешно сдал)
11 декабря 2008 в 21:04
Артур Терменжи
Ми на с++не пишет, но все же, не проще ли получить ввод cin во float, затем проверить
if((число – ПолучениеЦелойЧасти(число)) == 0)
действие;
11 декабря 2008 в 21:04
так не получишь результата а именно – не сможешь кинуть ексепшен во время ввода, что как раз требуется.
Хотя этот вариант тоже можно развить и убрать классы перегрузки операторов и прочее. Доделать так что бы проверка была во время ввода. Но тогда переход от С++ к С
11 декабря 2008 в 19:01
"Люблю" С++, на нем для самых простых вещей пишешь велосипед ))
Точнее "высокие ходули", чтобы не наступать на одни и те жеграбли.
На Java или C# все это намного легче делается.
10 декабря 2008 в 23:05
ага уже нашел, спс за идею
10 декабря 2008 в 23:04
есть atof во float
10 декабря 2008 в 23:03
в перегруженом операторе ">>" считываешь с клавиатуры данные к примеру в строку…и если в ней будет хоть один символ не цифра
кидаешь ексепшен. Если все в порядке приводиш с помощью atoi к числу и присваеваешь полю класа…
все проверки делаешь в операторе ввода…
ексепшен встраиваешь в класс…
для него еще определяешь момент когда число превышает рамки допустимого…
несмотря на то что метод через задницу, проще в голову не приходит…пока )
10 декабря 2008 в 23:03
жирное извращение…надо попробовать спс))
10 декабря 2008 в 23:03
мысли не стандартно а потом подганяй под рамки
со временем все придет
10 декабря 2008 в 23:03
а есть подобие atoi для конвертации во float или double?
10 декабря 2008 в 22:03
при перегруженном ">>" я считаю значение float, затем для записи в класс int запустится этот оператор ,в котором полю данных класса int
присвоится считанное значение float… правильно тебя понял?
10 декабря 2008 в 21:05
а…так…ну для встроенных типов наверно никак, точнее я не знаю такого способа…
Если уж так надо то изваратись так:
1) создай класс обертку для каждого типа
2) обяви explicit конструктор…
3) перегрузи для класов такие вещи как "<<" ">>"
а дальше делай уже что надо…
10 декабря 2008 в 21:03
при приведении типов исключение не генерируется само. например мне надо считывать int. тогда при вводе числа 1.5 оно просто преобразуется к 1, исключение не возникает и ввод на этом заканчивается.
собственно и вопрос возник: как авто приведение типов отключить?
10 декабря 2008 в 20:02
try{
//здесь все операции при любой ошибке поймает…
}catch(…)
10 декабря 2008 в 20:00
int i; // нужно число ввести
cout<<"Enter: "<<endl;
cin>>i;
if(i>=MAX){ //MAX – максимальное значение типа int
//Пишем ошибку
}
опечатка вышла
10 декабря 2008 в 20:00
Нодир نادر Азам о такоем варианте думал, но мне надо работать со всеми числовыми типами. лучше отключить приведение типов, чтобы генерировалось исключение, но я не знаю как его отключить
10 декабря 2008 в 19:05
Тут не подскажешь, если не увидишь что и куда…
ну например так…
int i; // нужно число ввести
cout<<"Enter: "<<endl;
cin>>i;
if(i<MAX){ //MAX – максимальное значение типа int
//Пишем ошибку
}
10 декабря 2008 в 19:04
или хотя бы как запретить приведение типов.(если бы нашел в гугле/мсдне/книгах не спрашивал бы)
10 декабря 2008 в 17:01
если не сложно можешь код такого ввода написать плз
10 декабря 2008 в 12:04
ну запрещаешь приведение типов и собственно проверяешь
10 декабря 2008 в 10:03
да, ввод с консоли. Win32 приложение
10 декабря 2008 в 8:02
откуда вводишь? С консоли?