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

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

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

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

23.11.2011, 22:03. Просмотров 3043. Ответов 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
23.11.2011, 22:12     Проверка соответствия типу int #2
if(cin>>m);
или
if(m%1); // Если с остатком дает true
MegaEvgeniy
7 / 7 / 0
Регистрация: 06.11.2011
Сообщений: 113
23.11.2011, 22:27  [ТС]     Проверка соответствия типу int #3
KeyGen,

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

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

Спасибо, но я только учусь. Можно по-наглядней пжл
soon
2537 / 1302 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
23.11.2011, 23:09     Проверка соответствия типу int #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
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
23.11.2011, 23:24     Проверка соответствия типу int #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  [ТС]     Проверка соответствия типу int #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
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
24.11.2011, 01:07     Проверка соответствия типу int #9
Цитата Сообщение от MegaEvgeniy Посмотреть сообщение
cin.clear();
cin.get();
cin.get(); // Ест букву неправильную
cin.clear(); //Снимает с cin ошибку
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2011, 01:56     Проверка соответствия типу int
Еще ссылки по теме:

Преобразования массива с типа int к типу char C++
Анализ вводимых данных на соответствие типу int C++
C++ Проверка на принадлежность к типу
Проверка переменной по типу C++
Как адрес IP перевели к типу int 32 C++

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

Или воспользуйтесь поиском по форуму:
MegaEvgeniy
7 / 7 / 0
Регистрация: 06.11.2011
Сообщений: 113
24.11.2011, 01:56  [ТС]     Проверка соответствия типу int #10
Цитата Сообщение от KeyGen Посмотреть сообщение
cin.get(); // Ест букву неправильную
cin.clear(); //Снимает с cin ошибку
Смысл, зачем обрабатывать запрос дополнительной командой , когда continue возвращает по новой итерацию цикла ?
Yandex
Объявления
24.11.2011, 01:56     Проверка соответствия типу int
Ответ Создать тему
Опции темы

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