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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 87, средняя оценка - 4.68
XaosLord
3 / 3 / 1
Регистрация: 18.03.2009
Сообщений: 20
#1

Проверка типа вводимой переменной - C++

18.03.2009, 00:34. Просмотров 12520. Ответов 10
Метки нет (Все метки)

Сабж. Консольный режим.
Возможно ли это вообще? Преобразование типов канечн рулезная вещь.

Вот в таком кусочке:
C++
1
2
cout << "Введите число";
int a = cin.get();
Как запретить считывание всего кроме int?
Нужно просто прочитать введенное с клавиатуры целое число. И чтоб ругался при вводе символов и чисел с запятой.

Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2009, 00:34     Проверка типа вводимой переменной
Посмотрите здесь:

Проверка типа переменной на этапе компиляции - C++
Добрый день. Прошу экспертов( ну или всех, кто это знает ) показать, как правильно &quot;повешать&quot; проверку времени компиляции на то, был ли...

Проверка правильности ввода для переменной типа short - C++
Как проверить, введённые числа в диапазоне Short или нет? Если я ввожу -32769, программа закрывается... int main() { short a, b, x,...

Определять тип вводимой переменной (char или int) - C++
Вообщем изначально дали задание определять тип вводимой переменной (char или int ). Это я выполнил,затем изменили задание, нужно сделать...

Нужно посчитать сумму положительных элементов кратных 2.причём началом этого масивва является не нулевой индекс,а значение ранее вводимой переменной р - C++
s=0; for(i=p; i&lt;=n;p++) if(a&gt;0 &amp;&amp; a%2==0) s+=a; cout&lt;&lt;&quot;Summa polozhitelnih elementov kratnih 2 =&quot;...

Шаблон типа переменной - C++
В графической библиотеке (SFML) есть шаблон для типа переменной Vector2. Переменная хранит в себе два числа заданного типа (Например,...

Преобразование типа переменной - C++
Как сделать что бы компилятор не отслеживал преобразование типов переменных Конкретней на примере: #include &lt;iostream&gt; #include...

Определение типа переменной - C++
#include &lt;iostream&gt; #include &lt;typeinfo&gt; int main() { int t = 10; std::cout &lt;&lt; typeid(t).name() &lt;&lt; std::endl; if...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
18.03.2009, 01:57     Проверка типа вводимой переменной #2
Запретить ты никак не можешь. Пользователь может вводить в консоли любые символы.
Вводи строку, проверяй ее, если верно - конвертить в нужный тип.
XaosLord
3 / 3 / 1
Регистрация: 18.03.2009
Сообщений: 20
18.03.2009, 13:43  [ТС]     Проверка типа вводимой переменной #3
спасибо за попытку ответить.

Нашел я решение: с помощью функции isdigit посимвольно проверить весь ввод.
snakext
6 / 6 / 1
Регистрация: 08.06.2010
Сообщений: 35
08.06.2010, 16:30     Проверка типа вводимой переменной #4
Извиняюсь что поднимаю старую тему, но вопрос у меня практически такой же, а именно:
Как сделать так, чтобы при вводе переменной типа int, выводились только целые числа, если же вводим число с запятой выдает надпись, что было введено не целое число.
Пробовал через деление с остатком - не получилось.
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
08.06.2010, 17:21     Проверка типа вводимой переменной #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
можно попробовать так в цикле пока не будет то что нужно
C++
1
2
3
4
5
6
7
8
int number;
cin >> number;
if (!cin)
{
cout << “Input Error!<< endl;
cin.clear();
fflush(stdin);
}
snakext
6 / 6 / 1
Регистрация: 08.06.2010
Сообщений: 35
08.06.2010, 19:35     Проверка типа вводимой переменной #6
Этот цикл выдает ошибку, если ввел не цифры, а буквы. В случае с дробными цифрами, он выводит целую часть. Как бы сделать, чтобы он на дробные цифры выдавал такую же ошибку, как на буквы ?
XaosLord
3 / 3 / 1
Регистрация: 18.03.2009
Сообщений: 20
10.06.2010, 11:34  [ТС]     Проверка типа вводимой переменной #7
Если isdigit'ом делать, то вот так:

C
1
2
3
4
5
6
7
8
9
10
11
12
  char str[4]="1.2";
  bool err = true;
  for(int i = 0; i < 3; i++)
  {
      if (!isdigit(str[i]))
      {
        err = false;
        break;
      }
  }
  if (err) printf ("Ok");
    else printf ("Error");
edd
36 / 36 / 0
Регистрация: 13.05.2010
Сообщений: 81
10.06.2010, 12:52     Проверка типа вводимой переменной #8
Цитата Сообщение от snakext Посмотреть сообщение
Этот цикл выдает ошибку, если ввел не цифры, а буквы. В случае с дробными цифрами, он выводит целую часть. Как бы сделать, чтобы он на дробные цифры выдавал такую же ошибку, как на буквы ?
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
#include <iostream>
using namespace std;
char ch='1';
int ii=0, iii=255;
//bool zz=false;
//void um (float*,char*);
//void ckobki(float*,char*);
//void znaki (float*,char*);
int main ()
{   int i=1;
    bool otvet=false;
    float  *a=new float[256];
    char *l=new char[256],  ch;
    for (int i=0; i<256; i++) {a[i]=0; l[i]='$';}l[0]='+'; 
    while(i+1){
    cin.get(ch);
    if (ch=='\n') break;    
    /*if (ch=='(')  {a[i]=1;l[i+1]='*'; l[i+2]=ch; i+=3;}
    if (ch==')')    {l[i]=ch;i++;}
    if (ch=='-')    {l[i]=ch;i++;}
    if  (ch=='+')   {l[i]=ch;i++;}
    if (ch=='*')    {l[i]=ch;i++;}
    if  (ch=='/')   {l[i]=ch;i++;}*/
    switch (ch){
        case '0':   case '5':   
        case '1':   case '6':
        case '2':   case '7':
        case '3':   case '8':
        case '4':   case '9':
        
            cin.putback(ch);
            cin>>a[i];i++; } }
 
    float z=a[1]/(int)a[1];
    if (z==1) 
 
    cout<<a[1];
return 0;}
кусок кода выдрал (пардон)

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
int main ()
{   float  a=0;
    char   ch;
     
    while(1){
    cin.get(ch);
    if (ch=='\n') break;    
    switch (ch){
        case '0':   case '5':   
        case '1':   case '6':
        case '2':   case '7':
        case '3':   case '8':
        case '4':   case '9':
        
            cin.putback(ch);
            cin>>a; }}
 
    float z=a/(int)a;
    if (z==1) cout<<a; else cout<<"error";
 
    return 0;}
удалил ненужное

Добавлено через 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
#include <iostream>
using namespace std;
int main ()
{   float  a=0;
    char   ch;
    int i=0;
     
    while(1){
    cin.get(ch);
    if (ch=='\n') break;    
    switch (ch){
        case '0':   case '5':   
        case '1':   case '6':
        case '2':   case '7':
        case '3':   case '8':
        case '4':   case '9':
        
            cin.putback(ch);
            cin>>a; i++;}}
    if (a==0 && i>0) cout<<a; else {
 
    float z=a/(int)a;
    if (z==1) cout<<a; else cout<<"error";}
 
    return 0;}
извечный нолик добавили к типу)))
FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
10.06.2010, 13:14     Проверка типа вводимой переменной #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ввод только целых чисел:
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
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
 
int main()
{
    int c, num, i = 0;
    char str[80];
    while ( ( c = _getch()) != 13 ) /* 13  - keys ENTER */
    {
        if ( isdigit( c ) /* || c == '.'*/  ) //раскоментируй для ввода десятичного разделителя 
        {
            str[i++] = (char) c; 
            _putch( c );
        }
    }
    str[i] = '\0'; 
 
    num = atoi( str );
 
    printf( "\nnum = %d\n", num );
 
    system("PAUSE");
    return 0;
}
Можно сделать (если не цифра то) печатать сообщение об ошибке
Ну, это не суть важно
Alexandrq
Сообщений: n/a
17.05.2013, 22:15     Проверка типа вводимой переменной #10
Цитата Сообщение от FireNovel Посмотреть сообщение
Ввод только целых чисел:
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
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
 
int main()
{
    int c, num, i = 0;
    char str[80];
    while ( ( c = _getch()) != 13 ) /* 13  - keys ENTER */
    {
        if ( isdigit( c ) /* || c == '.'*/  ) //раскоментируй для ввода десятичного разделителя 
        {
            str[i++] = (char) c; 
            _putch( c );
        }
    }
    str[i] = '\0'; 
 
    num = atoi( str );
 
    printf( "\nnum = %d\n", num );
 
    system("PAUSE");
    return 0;
}
Можно сделать (если не цифра то) печатать сообщение об ошибке
Ну, это не суть важно
Подскажите пожалуйста!
Вопрос 1.
В этом примере из строки достают число типа int. Причем слова вводить нельзя.
Как float достать из str[i]?

Вопрос 2.
Как выглядит проверка ввода "да\нет"?
Чтобы можно было вводить только символы.
А потом проверить, что ввел, ну и дальше там код писать какой надо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2016, 17:27     Проверка типа вводимой переменной
Еще ссылки по теме:

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

Проверка ввода переменной - C++
Ребята) Создаю переменную типа int. Затем ввожу данные в консоли и присваиваю их переменной. Как проверить, были ли введены данные типа int...

Проверка типа - C++
int n; std::cin &gt;&gt; n; Как проверить тип введённых данных? Ведь если введено не int, то программа будет работать не так, как мне...

Удаление переменной типа класса - C++
Как удалить переменную типа класса который я сам создал?

Вывод переменной типа char - C++
Переменная x типа char. x = 65; cout &lt;&lt; x; Так выводиться &quot;A&quot;. x = 64; cout &lt;&lt; x+1;


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

Или воспользуйтесь поиском по форуму:
Dm1triy
0 / 0 / 0
Регистрация: 17.10.2016
Сообщений: 3
17.10.2016, 17:27     Проверка типа вводимой переменной #11
Вот эта штука работает)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
 
using namespace std;
 
int main()
{
    int a;
    cin >> a;
    if (cin.get() == (int) '\n')
        cout << a << endl;
    else
        cout << "error" << endl;
    system("pause");
    return 0;
}
Yandex
Объявления
17.10.2016, 17:27     Проверка типа вводимой переменной
Ответ Создать тему
Опции темы

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