Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 27.05.2017
Сообщений: 5

Try catch реализация для проверки вводимых типов данных в объект

30.05.2017, 22:02. Показов 6963. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, форум!

Прошу помощи в реализации проверки потока ввода в класс на правильность типа данных с помощью try catch.

Что у нас есть:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
friend ofstream& operator << (ofstream &out_ex, Exponential& V2) //для ввода в файл
    {
 
        cout << "Take in First Element of progresion" << endl;
        cin >> V2.first;
        out_ex << V2.first;
 
        cout << "Take in difference of progresion" << endl;
        cin >> V2.difference;
        out_ex << V2.difference;
 
        cout << "Take in last element of progresion" << endl;
        cin >> V2.number;
        out_ex << V2.number;
        return out_ex;
    }
Где Exponential есть дочерний класс Series(class Exponential : public Series), а friend ofstream& operator << объявлен в классе Exponential


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Series
{
protected:
    double first, difference, number;
public:
    Series(void) {
        first = difference = number = 0.0;
    }
    Series(double first, double difference, double number)
    {
        this->first = first;
        this->difference = difference;
        this->number = number;
    }
 
    double get_first(void)
    {
        return first;
    }
    double get_difference(void)
    {
        return difference;
    }
    double get_number(void)
    {
        return number;
    }
    virtual double element(void) = 0;
    virtual double summ(void) = 0;
};
Как я пробовал
1) присвоить временной переменной значение V1.first и его уже проверять по типу
C++
1
2
3
4
5
6
7
8
9
10
try
{
        cout << "Take in First Element of progresion" << endl;
        cin >> V1.first;
        check_first = V1.first;
}
catch (int check_first)
{
    cout << "Not int" <<endl;
}
Что конечно же не выходило..
Идей нет, буду приемного благодарен помощи.

И ещё вопрос:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define _CRT_SECURE_NO_WARNINGS
setlocale(LC_ALL, "rus");
        char name[10];
        string buff;
        int i,j=0;
        int summ[50];
        
        i= 0;
        cin.getline(name, 10);
 
        strcat(name, ".txt");
        cout << name << endl;
 
        ifstream in(name);
//код
Почему он ругается на strcat, если я уже использовал
#define _CRT_SECURE_NO_WARNINGS?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2017, 22:02
Ответы с готовыми решениями:

Модуль для проверки вводимых данных
Есть программа, #include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; void...

Написание тригера для проверки правильности вводимых данных
Здавствуйте, необходимо написать триггер для проверки правильности входных даных таблицы maintenance_type столбца cost. Что при...

Как изменить функцию для проверки вводимых данных?
Добрый вечер! Самостоятельно постройте регулярное выражение, описывающее шаблон для проверки номера телефона, и внесите все необходимые...

5
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
30.05.2017, 22:17
По идее должно заработать. Ты должен кинуть исключение (throw) нужного типа, а потом ловишь (catch) и обрабатываешь как тебе надо.
C++
1
2
3
4
5
6
7
try {
        cout << "Take in First Element of progresion" << endl;
        cin >> V1.first;
        if(нужная_тебе_проверка) throw 1;
} catch (int check_first) {
    cout << "Not int" <<endl;
}
Добавлено через 4 минуты
Цитата Сообщение от LiapkinTiapkin Посмотреть сообщение
Почему он ругается на strcat
#include <cstring> делал?
0
0 / 0 / 0
Регистрация: 27.05.2017
Сообщений: 5
30.05.2017, 22:23  [ТС]
#include <cstring> делал

if(нужная_тебе_проверка) throw 1; // но если я делаю проверку через if, то зачем тогда конструкция try catch? Да, я понимаю, что прежде, чем переходить к catch, надо что то throw. Но вот проверяет ли catch то, что кинул throw - я не ферштейн. И как проверить переменную объекта на введённый тип данных?

В идеале бы конечно если бы был показан способ проверки потока ввода на тип данных
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
30.05.2017, 23:04
LiapkinTiapkin, берешь string, пишешь для начала в строку, потом проходишь по каждому символу проверяя его, если то, что тебе нужно - записываешь в поток stringstream (#include <sstream>), после записываешь из потока stringstream в нужную переменную.
Если это не то, что тебе нужно - ставишь переменной значение по-умолчанию.

Добавлено через 7 минут
Вот пример работы с потоком. Функция с помощью которой можно записывать дробное число в CMD используя 'запятую' вместо 'точки'. Ну это всё конечно можешь не через функцию делать, а напрямую себе туда код встроить со своими проверками. Подробнее о работе с потоком stringstream можешь в интернете почитать, если принципа работы не понял.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <sstream>
 ...
 ...
 ...
// snum - принимает строку по ссылке
// num - принимает double по ссылке, куда будет записан результат
void f(std::string &snum, double &num) { // принимаем строку по ссылке и переменную по ссылке которой будет изменен результат
    std::stringstream sstr;
    for (auto const& val : snum) // Идем по всем символам строки
        sstr << (val == ',' ? '.' : val); // если встретилась Запятая, то заменяем На точку и пишем в поток, в противном случае записываем значение в поток
    sstr >> num; // Записываем из потока в переменную
 /* Т.е. если написали  2,12  то эта функция сделает как 2.12 а потом запишет в num */
}
Добавлено через 10 минут
Просто не пойму, тебе надо чтоб число которое ты вводил имело знаки после запятой, или нет?
К чему эта проверка на типы?
0
0 / 0 / 0
Регистрация: 27.05.2017
Сообщений: 5
30.05.2017, 23:18  [ТС]
Действительно, забыл указать цель задания, прошу прощения.

Спасибо за подробное описание такого чудного способа, найду применение в коде, от души!)
А вопрос на самом деле иной - если пользователь вводит в V1.number не числа, то надо выдать ошибку. Т.е try catch для вылавливания такого случая, имелось в виду.
0
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
31.05.2017, 01:33
LiapkinTiapkin, это вам так сказали через Исключение делать? Тогда вот, подобным способом делайте. Сначала вводите в строку, потом сразу же кидайте исключение и там уже обрабатывайте sstream'ом (конечно лучше класс для этого всего ещё сделать). В библиотеке cctype/locale(<- для C++) есть функция int isdigit( int character ); - если символ является цифрой (0-9) - true, если нет - false.
Много есть разных способов, просто головой надо думать
Если не разберешься, то отпиши и после обеда набросаю примерный код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2017, 01:33
Помогаю со студенческими работами здесь

Реализация алгоритма сортировки для любых типов данных
Помогите пожалуйста переделать реализацию сортировки так, чтобы она могла работать с любыми типами данных(int, double, etc) Т.е. могла...

Создание функции проверки вводимых данных
Помогите реализовать функцию проверки вводимых данных с помощью getch. Уже весь мозг себе сломал как это сделать!

Сравнение типов данных вводимых пользователем
Здравствуйте, пытался гуглить, но ничего не нашел. Проблема: К примеру пользователь в программе должен ввести число и дальше идет...

Преобразование типов вводимых пользователем данных в WinForms
Всем привет. У меня не получается преобразовать &quot;String^&quot; в &quot;string&quot;, в данном случае я пытался сделать так: private: System::Void...

Создание проверки вводимых значений через vba (тип данных список)
Добрый день! Пытаюсь написать макрос, который на основе именовонного диапазона создает &quot;Проверку вводимых значений&quot; в ячейке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru