Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Levanoff
0 / 0 / 0
Регистрация: 22.11.2010
Сообщений: 31
#1

Как проверить какой тип данных вводится? - C++

05.01.2011, 21:18. Просмотров 1347. Ответов 17
Метки нет (Все метки)

Доброго времени суток.
Подскажите пожалуйста!С клавиатуры вводится два целых числа.Как после ввода проверить,что было введено именно int,а не что-то другое?Вопрос не сложный,я думаю.
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2011, 21:18     Как проверить какой тип данных вводится?
Посмотрите здесь:

Проверить на тип вводимых данных - C++
Опыта в программировании у меня нету,всего пару дней :) поэтому может вопрос и глупый, тем не менее: Вобщем простенькая функция с...

Геометрическая прогрессия: какой тип данных определить - C++
Привет, форумчане! В CPP я еще очень и очень зеленый, поэтому, нужна ваша помощь. Есть проблема с определением типа данных для...

Какой тип данных нужен для возведения в степень - C++
Добрый день. При возведении числа в степень столкнулся с проблемой, что при возведении числа 9 в 8 степень (как пример) выдает абракадабру...

Какой тип данных использовать для работы с большими числами? - C++
Здравствуйте! Какой тип данных можно использовать для больших чисел( unsigned long long не получается)?

Какой тип данных правильный при определении времени выполнения? - C++
Народ, какой тип данных привильный. При прирывании счетчик повышает значение на 1(левая колонка), в правой микросекунды. Отрывок кода ...

Какой тип данных лучше подойдет для приложения, которое делит числа int или float? - C++
Ответ написал int Хотя нутром чую, что float

Как проверить тип переменный, который получен через cin? - C++
Вообще как можно реализовать, чтобы юзер набрал число с типом десятичной или вещественного типа. Надо у знать что за тип, чтобы впихать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
05.01.2011, 21:19     Как проверить какой тип данных вводится? #2
Ввод производи в строку, потом проверяй ее, а потом переводи в int
Levanoff
0 / 0 / 0
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 21:47  [ТС]     Как проверить какой тип данных вводится? #3
Спасибо за помощь!
Буду тренироваться)
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
05.01.2011, 21:51     Как проверить какой тип данных вводится? #4
Вот ещё один вариант !

C++
1
2
3
4
5
6
7
8
9
10
#include<iostream.h>
#include<conio.h>
main()
{
      int a, b; double a1, b1;
      cin>>a1>>b1; a=a1; b=b1;
      if (a==a1 && b==b1) cout<<"\n\nThis is int";
      else cout<<"\n\nThis isn't int";
      getch();
}
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
05.01.2011, 22:04     Как проверить какой тип данных вводится? #5
Хороший код

Добавлено через 4 минуты
Вот что у меня получилось с помощью метода, который предложил Алексaндр,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
int main(void)
{setlocale(LC_ALL,"Russian");
int a,b; float a1,b1;
cout<<"Введите первое число: ";
cin>>a1;
cout<<"Введите второе число: ";
cin>>b1;
a=a1;
b=b1;
cout<<"Первое число имеет тип "<<(a==a1 ? "int" : "отличный от int")<<endl;
cout<<"Второе число имеет тип "<<(b==b1 ? "int" : "отличный от int")<<endl;
return 0;}
Levanoff
0 / 0 / 0
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 22:20  [ТС]     Как проверить какой тип данных вводится? #6
А что если ввиду букву?
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
05.01.2011, 22:25     Как проверить какой тип данных вводится? #7
Цитата Сообщение от Levanoff Посмотреть сообщение
С клавиатуры вводится два целых числа.
А если по сути, я не знаю ))
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
05.01.2011, 22:28     Как проверить какой тип данных вводится? #8
Я проверял на буквах. Тоже работает.=)
Levanoff
0 / 0 / 0
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 22:34  [ТС]     Как проверить какой тип данных вводится? #9
Ну да,это я не точно написал.=)
Короче,в моей программке нужно ввести два числа(номер клиента и пароль).Вот и необходимо проверить,что ввел пользователь.Потому что,если ввести какой нибудь знак,программа зависает.А надо,что бы она снова просила ввести номер.Вот эта проверка и не получается.
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
05.01.2011, 22:36     Как проверить какой тип данных вводится? #10
Levanoff, ну уже получилось ?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.01.2011, 22:36     Как проверить какой тип данных вводится? #11
считываешь строкой, а потом проход по строке с проверкой isdigit(str[i]);
Levanoff
0 / 0 / 0
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 22:46  [ТС]     Как проверить какой тип данных вводится? #12
Один из комментариев с кодом удалили.
Сейчас вставлю оставшийся.
Через несколько минут отпишу результат.
Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
05.01.2011, 22:48     Как проверить какой тип данных вводится? #13
Алексaндр, как вы проверяли с буквами? Ведь если вы с клавиатуры ввели букву, то она должна присвоиться переменной типа double
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
05.01.2011, 22:54     Как проверить какой тип данных вводится? #14
Вот как можно организовать проверку:
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
#include <stdio.h>
#include <stdlib.h>
 
int isCorrectId(char* id)
{
    while(*id)
    {
        if(!isdigit(*id))
            return 0;
        ++id;
    }
    return 1;
}
 
int main()
{
    char id[5]; // Номер
    puts("Input client's id:");
    scanf("%4s", id);
    if(isCorrectId(id))
        // Номер правильный, дальше его можно перевести в int
        printf("Client's id is a correct number: \'%s\'\n", id);
    else
        printf("Client's id is incorrect\n");
    return 0;
}
Levanoff
0 / 0 / 0
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 22:55  [ТС]     Как проверить какой тип данных вводится? #15
Я только сейчас проверил.
С числами работает,а с буквами нет.
Ввел букву,программа зависла и начала бесконечно печатать "повторите ввод".
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
05.01.2011, 23:04     Как проверить какой тип данных вводится? #16
Странно, я вводил слова даже - оно нормально выписывало, что это не инт.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
06.01.2011, 00:06     Как проверить какой тип данных вводится? #17
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
//////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <sstream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
template<class T>
void  input(const T_str&  prompt, T&  t)
{        
    for(;;)
    {        
        std::cout << prompt;
        T_str  s;
        std::cin >> s;
        std::istringstream  ssin(s);
        if(ssin >> t) break;
    }
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
 
    int  id;
    input("Введите номер клиента: ", id);
    int  password;
    input("Введите пароль:        ", password);
 
    std::cout << std::endl
              << "Номер клиента: "              
              << id
              << std::endl
              << "Пароль:        "              
              << password
              << std::endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2011, 06:25     Как проверить какой тип данных вводится?
Еще ссылки по теме:

Как проверить тип переменный, который получен через cin? - C++
Вообще как можно реализовать, чтобы юзер набрал число с типом десятичной или вещественного типа. Надо у знать что за тип, чтобы впихать...

Как проверить на какой класс ссылается указатель? - C++
То есть допустим есть базовый класс class A и производные class B:public A; class C:public A; также есть ссылка A *s; ...

Определить все данные, тип которых вводится из командной строки - C++
Файл содержит символы, слова, целые числа и числа с плавающей запятой. Определить все данные, тип которых вводится из командной...

Как осуществить ввод числа, не зная какой тип числа будет введён? - C++
И не объявляя вводимую переменную как double...

Как определить тип данных? - C++
Как определить тип данных переменной?


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

Или воспользуйтесь поиском по форуму:
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
06.01.2011, 06:25     Как проверить какой тип данных вводится? #18
Цитата Сообщение от Sokolov Посмотреть сообщение
Хороший код
Ничего хорошего! Во-первых проблему не решает (попробуйте буковки ввести), а во-вторых вот такое бездумное приведение типов, да ещё и сравнивание переменных разных типов - прямой путь к трудноуловимым ошибкам.

Вот типа по-взрослому
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
#include <iostream>
#include <stdexcept>
#include <limits>
#include <cstdlib>
 
int main(){
    int num1, num2;
    char tail;
 
    std::cin.exceptions(std::istream::failbit);
    std::cin.unsetf(std::ios_base::skipws);
    while ( true ){
        try {
            std::cout << "Enter first number: ";
            std::cin >> num1 >> tail;
            if ( tail != '\n' )
                throw std::runtime_error("Need only number!");
            std::cout << "Enter second number: ";
            std::cin >> num2 >> tail;
            if ( tail != '\n' )
                throw std::runtime_error("Need only number!");
            std::cout << "First number: " << num1 << std::endl;
            std::cout << "Second number: " << num2 << std::endl;
            if ( ! num1 || ! num2 ){
                std::cout << "Bye!" << std::endl;
                break;
            }
        }
        catch ( std::istream::failure e ){
            std::cerr << "Need some number!" << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
        catch ( std::runtime_error e ){
            std::cerr << e.what() << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
    }
 
    system("pause");
    return 0;
}
Yandex
Объявления
06.01.2011, 06:25     Как проверить какой тип данных вводится?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru