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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 87, средняя оценка - 4.68
XaosLord
3 / 3 / 1
Регистрация: 18.03.2009
Сообщений: 20
18.03.2009, 00:34     Проверка типа вводимой переменной #1
Сабж. Консольный режим.
Возможно ли это вообще? Преобразование типов канечн рулезная вещь.

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

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

C++ Преобразование типа переменной
Переменной d присвоить первую цифру после запятой некоторой переменной x типа float C++
C++ Хранение типа данных в переменной
Нужно посчитать сумму положительных элементов кратных 2.причём началом этого масивва является не нулевой индекс,а значение ранее вводимой переменной р C++
C++ Определять тип вводимой переменной (char или int)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6469 / 2244 / 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
 Аватар для 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
 Аватар для 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
 Аватар для 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++ Шаблон типа переменной
Проверка правильности ввода для переменной типа short C++

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

Или воспользуйтесь поиском по форуму:
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     Проверка типа вводимой переменной
Ответ Создать тему
Опции темы

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