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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
MegaEvgeniy
7 / 7 / 0
Регистрация: 06.11.2011
Сообщений: 113
#1

Проверка соответствия типу int - C++

23.11.2011, 22:03. Просмотров 3392. Ответов 9
Метки нет (Все метки)

Привет всем

Вот кусок кода

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    int kolvoChel=0;
    int m=0;
    int w=0;
    int k=0;
 
    cout << "Vvedite kol-vo mugchin v semie: ";
    cin >> m;
    cout << "Vvedite kol-vo genchin v semie: ";
    cin >> w;
    cout << "Vvedite kol-vo detey v semie (do 18 let): ";
    cin >> k;
    cout << endl << endl;
    
    kolvoChel = m + w;
Вопрос: Как сделать так, что бы при вводе например в переменную m значения не типа int выводилось предупреждение и возвращалось на этап введения значения в m ?

PS_ Проще говоря, как задать if else или switch, чтобы они проверяли на соответствие типу int
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2011, 22:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка соответствия типу int (C++):

Как адрес IP перевели к типу int 32 - C++
Добрый день. Прошу помощи во следующему вопросу: Изучаю программу по передачи данных клиент-сервис. Для настройки пересылки в...

Анализ вводимых данных на соответствие типу int - C++
Доброго времени суток. Упёрся в стену.... Помогите реализовать проверку с консоли вводимых данных. Нужно проверить что в объект...

Преобразования массива с типа int к типу char - C++
Помогите решить задачу. Требуется создать шаблон класса для преобразования массива с типа int к типу char, помогите кто чем сможет буду...

Рекурсия (проверка на предмет соответствия закрывающих и открывающих скобок) - C++
Пусть в алгебраической записи выражения имеется всего одна операция, умножение, обозначаемое обычным образом ( 2 сомножителя следуют...

Порядок байт. Массив чаров приводится к типу unsigned int. - C++
Есть массив из 4 char. Массив приводится к типу unsigned int и затем данные извлекаются в переменную типа unsigned int. Нужно, чтобы байты...

Проверка на принадлежность к типу - C++
Господа, подскажите, возможно ли проверять введенные данные на принадлежность к какому-либо типу данных, например число на int или float? ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
KeyGen
384 / 291 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
23.11.2011, 22:12 #2
if(cin>>m);
или
if(m%1); // Если с остатком дает true
MegaEvgeniy
7 / 7 / 0
Регистрация: 06.11.2011
Сообщений: 113
23.11.2011, 22:27  [ТС] #3
KeyGen,

Не работает так. Выплёвывает с ошибкой при дебаге.

Вот например я ввёл в m 'a', то у меня в консоли бесконечно идёт перечисление строк, нужно именно проверка соответствия типу int
alkagolik
Заблокирован
23.11.2011, 22:53 #4
MegaEvgeniy, варианта два
1. использовать try catch
2. считать в строку и переводить в число.
MegaEvgeniy
7 / 7 / 0
Регистрация: 06.11.2011
Сообщений: 113
23.11.2011, 22:56  [ТС] #5
alkagolik,

Спасибо, но я только учусь. Можно по-наглядней пжл
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
23.11.2011, 23:09 #6
Все работает с if(std::cin >> x). Вот только надо с вещественными думать, а то он и число и error выводит.
Код
soon@bt:~/Desktop$ cat main.cpp
#include <iostream>

int main()
{
    int x;
    while(true)
        if(std::cin >> x)
            std::cout << x << std::endl;
        else
        {
            std::cout << "error" << std::endl;
            return 1;
        }
    return 0;
}
soon@bt:~/Desktop$ g++ main.cpp -o main && ./main
1
1
3.0
3
error
soon@bt:~/Desktop$ ./main
q
error
soon@bt:~/Desktop$
KeyGen
384 / 291 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
23.11.2011, 23:24 #7
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
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
        
        int i=0;
        int mas[10];
        
        cout << "Введите количество детей в семье 1: ";
 
        while (i<70){
              cin >> mas[i];
             if(!cin){
             cout << "Ошибка! Введите количество детей в семье(целое число): ";
             cin.clear(); // Снимает ошибку
             cin.get();
             continue;
             }
        i++;
        cout << "Введите количество детей в семье " << i+1 << ": ";
        }
        
        
        system("pause");
        return 0;
        }
Миниатюры
Проверка соответствия типу int  
MegaEvgeniy
7 / 7 / 0
Регистрация: 06.11.2011
Сообщений: 113
24.11.2011, 00:32  [ТС] #8
KeyGen,

Спасибо. Даже узнал наконец как по русски выводить в консоль, спасибо большое.

Вот в принципе ваш код с моими корректировками

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
cout << "Введите количество мужчин в семье: ";
while (1){
             if(cin >> m)
             break;
         else if(!cin){
                   cout << "Ошибка! Введите количество мужчин в семье(целое число): ";
             cin.clear();
             cin.get();
             continue;
             }
        }
 
 
    cout << "Введите количество женщин в семье: ";
while (1){
             if(cin >> w)
        break;
         else if(!cin){
             cout << "Ошибка! Введите количество женщин в семье(целое число): ";
             cin.clear();
             cin.get();
             continue;
             }
        }
    cout << "Введите количество детей в семье (до 18 лет): ";
while (1){
             if(cin >> k)
        break;
         else if(!cin){
             cout << "Ошибка! Введите количество детей в семье(целое число): ";
             cin.clear();
             cin.get();
             continue;
             }
        }
    cout << endl << endl;
    
    kolvoChel = m + w;
++++++ Вопрос
cin.clear();
cin.get();
Для чего они нужны ? И почему не работает просто cin >> k после
C++
1
cout << "Ошибка! Введите количество детей в семье(целое число): ";
. Создаётся бесконечный цикл вывода сообщения
C++
1
2
3
4
5
else if(!cin){
     cout << "Ошибка! Введите количество детей в семье(целое число): ";
         cin >> k;
         continue;
  }
//В гугле определения одни, мне бы по свойски пжл
KeyGen
384 / 291 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
24.11.2011, 01:07 #9
Цитата Сообщение от MegaEvgeniy Посмотреть сообщение
cin.clear();
cin.get();
cin.get(); // Ест букву неправильную
cin.clear(); //Снимает с cin ошибку
MegaEvgeniy
7 / 7 / 0
Регистрация: 06.11.2011
Сообщений: 113
24.11.2011, 01:56  [ТС] #10
Цитата Сообщение от KeyGen Посмотреть сообщение
cin.get(); // Ест букву неправильную
cin.clear(); //Снимает с cin ошибку
Смысл, зачем обрабатывать запрос дополнительной командой , когда continue возвращает по новой итерацию цикла ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2011, 01:56
Привет! Вот еще темы с ответами:

Проверка переменной по типу - C++
Задался таким вопросом: можно ли сравнить переменную, которую принимает функция по ее типу и в зависимости от типа переменной выполняются...

Сделать преобразование unsigned char в char, а затем типу int - C++
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec - C++
Вот есть заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using...

Проверка на Int - C++
Не знаю как реализовать проверку на ввод только Int c возможностью исправления(т.е. пока не будет введен Int будет выскакивать сообщение с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.11.2011, 01:56
Ответ Создать тему
Опции темы

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