С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/146: Рейтинг темы: голосов - 146, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 8

Проверка ввода - число ли это, и целое ли

14.11.2012, 23:19. Показов 27114. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как правильно сделать проверку ввода так, чтобы вводимое проверялось на то, число ли это, и целое ли, и если да, записывалось в переменную без повторного ввода?

Делал так:
C++
1
2
3
4
5
6
...
int n;
...
if (!(cin>>n)) cout << "Invalid input";
else cin>>n;
...
Но так ошибка выводится, только если то, что вводится, не число, к тому же приходится вводить 2 раза.
А чтобы проверить, целое ли число, через if ( n % 1 == 0), нужно же, чтобы переменная была не int. То есть использовать еще дополнительную переменную. Можно ли это все сделать как-нибудь попроще?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.11.2012, 23:19
Ответы с готовыми решениями:

Загадано целое число из интервала [A,B]. Написать программу, которая за минимальное число вопросов отгадает это число
Я загадаю целое число из интервала . Напишите программу, которая за минимальное число вопросов отгадает это число. Играть будем так. Я...

Проверка ввода в с++ (целое/вещественное)
Здравствуйте, необходима помощь в написании программы! Необходимо использовать ввод значения с клавиатуры - про этом если в задаче...

Дано целое число n. преобразовать это число так, что если ...
Дано целое число n. преобразовать это число так что если подрят встречаются 2 одинаковых цифры то одна из них удаляется

10
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 80
15.11.2012, 03:33
вот писал проверку на 0 для умножения Может смекнешь как к себе вставить, думаю, что принцип то 1

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
44
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "conio.h"
#include "time.h"
 
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Rus");
    double a, c=1, n;
    int i=1;
    cout<<"Умножение."<<endl<<endl;
    cout<<"Введите количество множителей"<<endl;
    cout<<"Количество = ";
    cin>>n;
    cout<<endl;
    for (i; i<n+1; i++)
    {
        cout<<"Введите "<<i<<" множитель"<<endl;
        cout<<"Множитель равен ";
        cin>>a;
        cout<<endl;
        c=c*a;
    if (c==0)
        {
            break;
        }
        cout<<"После "<<i<<" множителя мы имеем результат: "<<c<<endl;
    }
    if (c!=0)
    {
    cout<<endl<<endl<<"Ответ: "<<c<<endl<<endl<<"Для выхода из программы нажмите 'Enter'";
    }
    if (c==0)
        {
            cout<<"Вы ввели 0. При умножении на результат всегда будет 0"<<endl<<endl<<"Для выхода из программы нажмите 'Enter'";
        }
    
    _getch();
    return 0;
}
0
24 / 22 / 5
Регистрация: 13.11.2012
Сообщений: 49
15.11.2012, 07:47
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <cctype>
 
char c;
int n; 
std::cin>>c;
 
if (isdigital(c)) {
     n=c;
     if ( n % 1 == 0)
          std::cout<<"You input "<<n<<" - integer digit";
   } else 
          std::cout<<"Invalid input";
return 0;
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
15.11.2012, 08:04
Цитата Сообщение от WildSpirit Посмотреть сообщение
Но так ошибка выводится, только если то, что вводится, не число, к тому же приходится вводить 2 раза.
а что ты хотел, если вводишь целочисленное
Цитата Сообщение от WildSpirit Посмотреть сообщение
int n;
вводи строку и анализируй её число или нет? целое или дробное?
Цитата Сообщение от WildSpirit Посмотреть сообщение
n % 1
расскажи мне тайный смысл этой записи остаток от деления на 1 всегда равен числу
в программировании для целочисленных (int , char)это правило будет соблюдаться
для плавающих (float double) оператор % не определен

Добавлено через 2 минуты
Цитата Сообщение от selo4404 Посмотреть сообщение
double a, c=1, n;
Цитата Сообщение от selo4404 Посмотреть сообщение
cout<<"Умножение."<<endl<<endl;
* * cout<<"Введите количество множителей"<<endl;
* * cout<<"Количество = ";
* * cin>>n;
а что количество может быть не целым???

Добавлено через 6 минут
Цитата Сообщение от Pavell Посмотреть сообщение
isdigital(n)
что за функция???
isdigit знаю эту нет
1
24 / 22 / 5
Регистрация: 13.11.2012
Сообщений: 49
15.11.2012, 08:15
Цитата Сообщение от ValeryS Посмотреть сообщение
что за функция???
isdigit знаю эту нет


на самом деле мое решение действительно только для чисел 0-9, ну и вот это:
C++
1
if ( n % 1 == 0)
конечно лишнее
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
15.11.2012, 08:19
Цитата Сообщение от ValeryS Посмотреть сообщение
расскажи мне тайный смысл этой записи остаток от деления на 1 всегда равен числу
пардон не заметил описка
требуется читать так
остаток от деления на 1 всегда равен нулю
1
24 / 22 / 5
Регистрация: 13.11.2012
Сообщений: 49
15.11.2012, 09:01
Не самое элегантное решение, но.... работать вроде должно

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
#include <iostream>
#include <cctype>
#include <cmath>
 
int n; 
char c;
bool isInt(false);
int counter(0);
int tmp[1000];
 
std::cin.get(c);
while (c!=' ') {                //пробел завершение ввода
        if (isdigit(c)) {
              tmp[counter]=c;
              counter++;
              isInt=true;
        } else {
              std::cout<<"Invalid input";
              isInt=false;
        }
        std::cin.get(c);       
}
 
if (isInt) {
        for (int i=counter; i>=0; i--)
        n+=pow (tmp[counter-i], 10*(counter-i+1));
        std::cout<<"You input "<<n<<" - integer digit";
}
 
return 0;
1
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 80
15.11.2012, 12:09
Цитата Сообщение от ValeryS Посмотреть сообщение
а что количество может быть не целым???
Проверка идет в цикле, и проверяю не N, а "c" а тут ответ уже может быть не целым
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  for (i; i<n+1; i++)
    {
        cout<<"Введите "<<i<<" множитель"<<endl;
        cout<<"Множитель равен ";
        cin>>a;
        cout<<endl;
        c=c*a;
    if (c==0)
        {
            break;
        }
        cout<<"После "<<i<<" множителя мы имеем результат: "<<c<<endl;
    }
    if (c!=0)
    {
    cout<<endl<<endl<<"Ответ: "<<c<<endl<<endl<<"Для выхода из программы нажмите 'Enter'";
    }
    if (c==0)
        {
            cout<<"Вы ввели 0. При умножении на результат всегда будет 0"<<endl<<endl<<"Для выхода из программы нажмите 'Enter'";
        }
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
15.11.2012, 12:29
Цитата Сообщение от selo4404 Посмотреть сообщение
Проверка идет в цикле,
а причем здесь проверка и количество множителей
Цитата Сообщение от selo4404 Посмотреть сообщение
double a, c=1, n;
n у тебя количество множителей которое объявлено как double
и при вводе
Цитата Сообщение от selo4404 Посмотреть сообщение
cin>>n;
пользователь имеет полное право ввести 2.5
ты можешь представить себе 2 с половиной множителя,я нет

Цитата Сообщение от selo4404 Посмотреть сообщение
if (c==0)
и вот это сравнение неправильное
почитай как сравниваются плавающие типы(вещественные числа)
1
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
15.11.2012, 17:32
WildSpirit, для защищённого ввода лучше всего подходят шаблоны, попробуй вот этот код
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>
using namespace std;
 
template <class T>
bool SafeInput(const char * msg, T &val)
{
    bool bInput = true;
    cout<<msg;
    if(!(cin>>val) || cin.get() != '\n')
        bInput = false;
    if(!bInput)
    {
        cin.clear();//Ñáðîñ ôëàãà îøèáêè
        cin.sync(); //Î÷èòñêà áóôåðà
    }
    return bInput;
}
 
int main()
{
    int iParam;
    double dParam;
 
    while(true)
    {
        if(!SafeInput("Enter integer : ", iParam))
            cout<<"Bad input"<<endl;
        else
            cout<<"Your input : "<<iParam<<endl;
 
        if(!SafeInput("Enter double   : ", dParam))
            cout<<"Bad input"<<endl;
        else
            cout<<"Your input : "<<dParam<<endl;
    }
    return 0;
}
Миниатюры
Проверка ввода - число ли это, и целое ли  
1
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 8
19.11.2012, 00:43  [ТС]
-=ЮрА=-, спасибо за ответ.
А вот если с переменными далее необходимо выполнить действия, а ввод оказался неправильным, как реализовать повторную проверку ввода?

Добавлено через 12 минут
А, все, сам разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.11.2012, 00:43
Помогаю со студенческими работами здесь

Дано целое число, входят ли в это число цифры 3,6,9
Доброво времени суток уважаемые форумчани) Помогите розобратса в задвчке): Дано целое число, узнать входят ли в это число цифры 3,6,9? ...

Разработать программу, проверяющую, делится ли целое четырехзначное число N нацело на сумму цифр, составляющих это число
Очень нужна помощь,если кому не лень уделить пару минут на решение,огромная благодарность! Разработать программу, проверяющую,...

Создать программу, которая запрашивает у пользователя целое число, и если это число непарное, то разделить его на 2
I) Создать программу, которая запрашивает у пользователя целое число, и если это число непарное, то разделить его на 2, в противном...

Java2 может ли целое число быть представлено каким-либо произведением цифр, входящих в это число
Разбираю задачу..... Есть код, но некоторые моменты мне не понятны...... Определить функцию для проверки может ли целое число быть...

Создать программу, которая позволяет ввести целое число n и вывести это число в виде произведения простых чисел
Здравствуйте. Не могли бы знающие люди помочь новичку с с++. суть проблемы вот: Создать программу, которая позволяет ввести целое...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru