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

Определение типа вводимых данных

04.08.2019, 13:14. Показов 2710. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Можно ли при вводе данных с клавиатуры определять какой тип ввели int или double? https://pastebin.com/fPmfAf0P
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2019, 13:14
Ответы с готовыми решениями:

Определение типа вводимых данных
Здравствуйте. Мне, как новичку, нужна помощь. Я делаю программу для работ с функциями. В начале программа просит нажать на цифру 1, 2 или...

Проверка типа вводимых данных.
Собственно,как осуществить ? К примеру,здесь: int main() { int x; int y; cin >> x;

Проверка вводимых данных на соответствие типа
Задание само очень простое - вычитание матриц, с помощью перегрузки функций (одна функция вычитает типы short, другая long double). ...

8
Заблокирован
04.08.2019, 13:47
считывать не число, а строку, по ней делать выводы
1
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,406
04.08.2019, 17:24
Ermak199, привет!

Кликните здесь для просмотра всего текста

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <typeinfo>
 
std::string determine_type(const std::string& str);
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    std::string input;
    std::getline(std::cin, input);
    std::cout << determine_type(input) << "\n";
    
    return 0;
}
 
std::string determine_type(const std::string& str)
{
    {
        int t;
        std::istringstream iss(str);
        iss >> t;
        std::ostringstream oss;
        oss << t;
        if (str == oss.str())
        {
            return typeid(t).name();
        }
    }
    {
        double t;
        std::istringstream iss(str);
        iss >> t;
        std::ostringstream oss;
        oss << t;
        if (str == oss.str())
        {
            return typeid(t).name();
        }
    }
    return "";
}


Добавлено через 1 час 49 минут
Ermak199, я ещё код придумал.
Кликните здесь для просмотра всего текста

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <functional>
 
std::string determine_type(const std::string& str);
 
int main()
{
    std::string input;
    std::getline(std::cin, input);
    std::cout << determine_type(input) << "\n";
 
    return 0;
}
 
std::string determine_type(const std::string& str)
{
    if (!str.size())
    {
        return "empty string";
    }
    try
    {
        size_t pos;
        std::stoi(str, &pos);
        if (pos != str.size())
        {
            throw std::invalid_argument("");
        }
    }
    catch (...)
    {
        try
        {
            size_t pos;
            std::stod(str, &pos);
            if (pos != str.size())
            {
                throw std::invalid_argument("");
            }
        }
        catch (...)
        {
            if (str.size() == 1u)
            {
                return "char";
            }
            else
            {
                return "string";
            }
        }
        return "double";
    }
    return "int";
}
2
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
05.08.2019, 09:27
Цитата Сообщение от Ermak199 Посмотреть сообщение
Здравствуйте! Можно ли при вводе данных с клавиатуры определять какой тип ввели int или double?
Только весьма приблизительно - считать строку, если она содержит только цифры, значит int, если цифры и точку, то double, иначе - строка.

Добавлено через 2 минуты
Цитата Сообщение от SomniPhobia Посмотреть сообщение
Ermak199, я ещё код придумал.
Очень плохая идея строить алгоритм на исключениях. Используй там if, а исключения оставь исключительно для ошибок.
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
05.08.2019, 10:28
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
если цифры и точку
еще знаки +, - и букву E для экспоненты.
Плюс и минус могут и в целое число входить.
Хотя стандартные strtol и strtod наверное проще, чем ручной парсниг строки.
0
 Аватар для SomniPhobia
602 / 439 / 137
Регистрация: 22.11.2017
Сообщений: 1,406
05.08.2019, 11:43
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Очень плохая идея строить алгоритм на исключениях. Используй там if, а исключения оставь исключительно для ошибок.
std::stoi() и std::stod() сами могут выбросить исключение, которое нужно отловить.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
05.08.2019, 11:48
Цитата Сообщение от SomniPhobia Посмотреть сообщение
std::stoi() и std::stod() сами могут выбросить исключение, которое нужно отловить.
Ну и зачем к ним ещё свои добавлять? Это во первых.
Во-вторых, исключения здесь не нужны вообще, пользуйся тогда уж strtol, strtod и т.д.
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
05.08.2019, 11:55
Цитата Сообщение от Ermak199 Посмотреть сообщение
Можно ли при вводе данных с клавиатуры определять какой тип ввели int или double?
Задача для студентов 1-го курса. Вводим строку и по синтаксическим диаграммам последовательно ее проверяем.
Для целого десятичного числа со знаком диаграмма такая: необязательный знак, ноль или последовательность цифр, начинающаяся не с нуля. Для других систем счисления добавляем префиксы, а так всё аналогично.
Для вещественных чисел тоже всё аналогично делается.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
05.08.2019, 14:33
Цитата Сообщение от Ermak199 Посмотреть сообщение
Можно ли при вводе данных с клавиатуры определять какой тип ввели int или double?
Нельзя. Причина в том, что вводится набор символов. Его можно интерпретировать как строку. Остальное - марксизм чистой воды. Например единица с сотней нулей не может быть ни каким из целых типов из-за переполнения (а как double - она может быть интерпретирована). Но ещё хуже то, что единица без любых нулей может быть и тем и другим. Заставить юзера вводить точку в конце, всё равно, что создать меню или иную логику для выбора типа (не вводимого в строку буфера клавиатуры, а способа её интерпретации). Тут абстракция целого из типа данных для текущей платформы конфликтует с математической абстракцией целого числа в обще математическом смысле. Единственный способ минимизировать конфликты излагаемых прототипов связных суждений со здравым смыслом, постараться не смешивать абстракции в виде "ввести целое число с клавиатуры" в применении к уровню, где нельзя вводить число с клавиатуры.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.08.2019, 14:33
Помогаю со студенческими работами здесь

Определение типа данных
К примеру вводим число 5, нужно определить что это тип int Если вводим какие-то символы, нужно определить, что это будет string А если...

Бинарный файл ( определение типа данных в нем)
Добрый вечер! Есть такая задача, имеется файл который мы открываем в бинарном режиме через fstream. Как определить какого размера...

Реализовать класс "Динамический массив"
1. Согласно заданию реализовать класс абстрактного типа данных (далее АТД) как динамический массив. Для этого определение класса должно...

Проверка вводимых данных
Вот часть программы int main(void) { int vop; setlocale(LC_ALL, &quot;Russian&quot;); int mas1, mas2, mas3, outmas; int ke1, ke2,...

Проверка вводимых данных
#include &lt;iostream&gt; using namespace std; int main() { double a, b, c; cout &lt;&lt; &quot;Enter the first side of the...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru