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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Levanoff
0 / 0 / 0
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 21:18     Как проверить какой тип данных вводится? #1
Доброго времени суток.
Подскажите пожалуйста!С клавиатуры вводится два целых числа.Как после ввода проверить,что было введено именно int,а не что-то другое?Вопрос не сложный,я думаю.
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
05.01.2011, 21:19     Как проверить какой тип данных вводится? #2
Ввод производи в строку, потом проверяй ее, а потом переводи в int
Levanoff
0 / 0 / 0
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 21:47  [ТС]     Как проверить какой тип данных вводится? #3
Спасибо за помощь!
Буду тренироваться)
Алексaндр
 Аватар для Алекс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
 Аватар для 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
 Аватар для Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
05.01.2011, 22:25     Как проверить какой тип данных вводится? #7
Цитата Сообщение от Levanoff Посмотреть сообщение
С клавиатуры вводится два целых числа.
А если по сути, я не знаю ))
Алексaндр
 Аватар для Алекс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ндр
 Аватар для Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
05.01.2011, 22:36     Как проверить какой тип данных вводится? #10
Levanoff, ну уже получилось ?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 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
 Аватар для Sokolov
42 / 42 / 3
Регистрация: 04.01.2011
Сообщений: 125
05.01.2011, 22:48     Как проверить какой тип данных вводится? #13
Алексaндр, как вы проверяли с буквами? Ведь если вы с клавиатуры ввели букву, то она должна присвоиться переменной типа double
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
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ндр
 Аватар для Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
05.01.2011, 23:04     Как проверить какой тип данных вводится? #16
Странно, я вводил слова даже - оно нормально выписывало, что это не инт.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
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     Как проверить какой тип данных вводится?
Еще ссылки по теме:

Геометрическая прогрессия: какой тип данных определить C++
C++ Какой тип данных правильный при определении времени выполнения?
Как проверить на какой класс ссылается указатель? C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
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     Как проверить какой тип данных вводится?
Ответ Создать тему
Опции темы

Текущее время: 02:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru