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

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

30.05.2017, 22:02. Показов 6935. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru