Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Levanoff
0 / 0 / 3
Регистрация: 22.11.2010
Сообщений: 31
#1

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

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

Доброго времени суток.
Подскажите пожалуйста!С клавиатуры вводится два целых числа.Как после ввода проверить,что было введено именно int,а не что-то другое?Вопрос не сложный,я думаю.
Спасибо.
http://www.cyberforum.ru/cpp-beginners/thread157861.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2011, 21:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как проверить какой тип данных вводится? (C++):

Путаница с типами данных TCHAR и char. Какой тип данных выбрать?
Я создавал тему в соседнем...

Проверить на тип вводимых данных
Опыта в программировании у меня нету,всего пару дней :) поэтому может вопрос и...

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

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

Какой тип данных правильный при определении времени выполнения?
Народ, какой тип данных привильный. При прирывании счетчик повышает значение на...

17
Nameless One
Эксперт С++
5785 / 3434 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
05.01.2011, 21:19 #2
Ввод производи в строку, потом проверяй ее, а потом переводи в int
0
Levanoff
0 / 0 / 3
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 21:47  [ТС] #3
Спасибо за помощь!
Буду тренироваться)
0
Алексaндр
131 / 108 / 12
Регистрация: 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();
}
1
Sokolov
42 / 42 / 13
Регистрация: 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;}
0
Levanoff
0 / 0 / 3
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 22:20  [ТС] #6
А что если ввиду букву?
0
Sokolov
42 / 42 / 13
Регистрация: 04.01.2011
Сообщений: 125
05.01.2011, 22:25 #7
Цитата Сообщение от Levanoff Посмотреть сообщение
С клавиатуры вводится два целых числа.
А если по сути, я не знаю ))
0
Алексaндр
131 / 108 / 12
Регистрация: 04.12.2010
Сообщений: 313
05.01.2011, 22:28 #8
Я проверял на буквах. Тоже работает.=)
0
Levanoff
0 / 0 / 3
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 22:34  [ТС] #9
Ну да,это я не точно написал.=)
Короче,в моей программке нужно ввести два числа(номер клиента и пароль).Вот и необходимо проверить,что ввел пользователь.Потому что,если ввести какой нибудь знак,программа зависает.А надо,что бы она снова просила ввести номер.Вот эта проверка и не получается.
0
Алексaндр
131 / 108 / 12
Регистрация: 04.12.2010
Сообщений: 313
05.01.2011, 22:36 #10
Levanoff, ну уже получилось ?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.01.2011, 22:36 #11
считываешь строкой, а потом проход по строке с проверкой isdigit(str[i]);
0
Levanoff
0 / 0 / 3
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 22:46  [ТС] #12
Один из комментариев с кодом удалили.
Сейчас вставлю оставшийся.
Через несколько минут отпишу результат.
0
Sokolov
42 / 42 / 13
Регистрация: 04.01.2011
Сообщений: 125
05.01.2011, 22:48 #13
Алексaндр, как вы проверяли с буквами? Ведь если вы с клавиатуры ввели букву, то она должна присвоиться переменной типа double
0
Nameless One
Эксперт С++
5785 / 3434 / 351
Регистрация: 08.02.2010
Сообщений: 7,448
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;
}
0
Levanoff
0 / 0 / 3
Регистрация: 22.11.2010
Сообщений: 31
05.01.2011, 22:55  [ТС] #15
Я только сейчас проверил.
С числами работает,а с буквами нет.
Ввел букву,программа зависла и начала бесконечно печатать "повторите ввод".
0
Алексaндр
131 / 108 / 12
Регистрация: 04.12.2010
Сообщений: 313
05.01.2011, 23:04 #16
Странно, я вводил слова даже - оно нормально выписывало, что это не инт.
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 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;
}
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
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;
}
0
06.01.2011, 06:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2011, 06:25
Привет! Вот еще темы с решениями:

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

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

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

Какой символьный тип использует тип std::string?
Какой тип данных использует класс String? Char? И написано ли это в в документе...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

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