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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
WildSpirit
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 8
#1

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

14.11.2012, 23:19. Просмотров 3103. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2012, 23:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка ввода - число ли это, и целое ли (C++):

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

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

Написать программу, реализует следующую игровую ситуацию: компьютер задает случайное целое число в интерали от 1 до 10, а мне нужно это число угадать - C++
Написать программу, реализует следующую игровую ситуацию: компьютер задает случайное целое число в интерали от 1 до 10, а мне нужно это...

Visual C++ проверка ввода на число, проверка на кирилицу - C++
Суть ввести с клавиатуры нечто, и повторять ввод до тех пор пока введенное число не будет числом. Этот код проверяет на буквы и знаки,...

проверка на целое число - C++
Можно ли сделать проверку на ввод целого числа, если его тип сразу задается, как int? Просто это массив и другой тип данных не применим,...

Как написать рекурсивную функцию,которая считает X^n , где n это число целое >=0 - C++
Доброго времени суток знатаки!, Как написать рекурсивную функцию,которая считает X^n , где n это число целое &gt;=0

10
selo4404
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 11
15.11.2012, 03:33 #2
вот писал проверку на 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
Pavell
14 / 14 / 0
Регистрация: 13.11.2012
Сообщений: 28
15.11.2012, 07:47 #3
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
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,934
15.11.2012, 08:04 #4
Цитата Сообщение от 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
Pavell
14 / 14 / 0
Регистрация: 13.11.2012
Сообщений: 28
15.11.2012, 08:15 #5
Цитата Сообщение от ValeryS Посмотреть сообщение
что за функция???
isdigit знаю эту нет


на самом деле мое решение действительно только для чисел 0-9, ну и вот это:
C++
1
if ( n % 1 == 0)
конечно лишнее
1
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,934
15.11.2012, 08:19 #6
Цитата Сообщение от ValeryS Посмотреть сообщение
расскажи мне тайный смысл этой записи остаток от деления на 1 всегда равен числу
пардон не заметил описка
требуется читать так
остаток от деления на 1 всегда равен нулю
1
Pavell
14 / 14 / 0
Регистрация: 13.11.2012
Сообщений: 28
15.11.2012, 09:01 #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
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
selo4404
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 11
15.11.2012, 12:09 #8
Цитата Сообщение от 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
ValeryS
Модератор
6654 / 5063 / 470
Регистрация: 14.02.2011
Сообщений: 16,934
15.11.2012, 12:29 #9
Цитата Сообщение от selo4404 Посмотреть сообщение
Проверка идет в цикле,
а причем здесь проверка и количество множителей
Цитата Сообщение от selo4404 Посмотреть сообщение
double a, c=1, n;
n у тебя количество множителей которое объявлено как double
и при вводе
Цитата Сообщение от selo4404 Посмотреть сообщение
cin>>n;
пользователь имеет полное право ввести 2.5
ты можешь представить себе 2 с половиной множителя,я нет

Цитата Сообщение от selo4404 Посмотреть сообщение
if (c==0)
и вот это сравнение неправильное
почитай как сравниваются плавающие типы(вещественные числа)
1
-=ЮрА=-
Заблокирован
Автор FAQ
15.11.2012, 17:32 #10
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
Миниатюры
Проверка ввода - число ли это, и целое ли  
WildSpirit
0 / 0 / 0
Регистрация: 26.09.2012
Сообщений: 8
19.11.2012, 00:43  [ТС] #11
-=ЮрА=-, спасибо за ответ.
А вот если с переменными далее необходимо выполнить действия, а ввод оказался неправильным, как реализовать повторную проверку ввода?

Добавлено через 12 минут
А, все, сам разобрался.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2012, 00:43
Привет! Вот еще темы с ответами:

Составить функцию, которая, получив целое число определяет, уменьшается ли оно в целое число раз - C++
задание такое Составить функцию, которая, получив целое число определяет, уменьшается ли оно в целое число раз, если у него удалить...

Написать объявление функции, возвращающую целое число и принимающую указатель на целое число - C++
объявите функцию f2, возвращающую результат целого типа и передающую указатель на переменную а целого типа. вызовите функцию f2 с...

как соединить b и с в число, если а это число, б это десятки перевернутого числа, с это единицы перевернутого числа вот в это строчке c=a+b,c; - C++
как соединить b и с в число, если а это число, б это десятки перевернутого числа, с это единицы перевернутого числа вот в это строчке...

Если целое число М делится на целое число N, то на экран выводится частное от деления, в противном случае выводится сообщение - C++
Если целое число М делится на целое число N, то на экран выводится частное от деления, в противном случае выводится сообщение «M на N...


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

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

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