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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
Unicode
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 4
#1

Проверка типа - C++

01.04.2009, 18:28. Просмотров 2662. Ответов 13
Метки нет (Все метки)

C++
1
2
int n;
std::cin >> n;
Как проверить тип введённых данных? Ведь если введено не int, то программа будет работать не так, как мне нужно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2009, 18:28     Проверка типа
Посмотрите здесь:

Проверка типа (typeid) - C++
Подскажите пожалуйста как можно правильно реализовать такую вещь: если тип переменной и == int то.... нагуглил функцию:...

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

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

Проверка типа вводимых данных. - C++
Собственно,как осуществить ? К примеру,здесь: int main() { int x; int y; cin >> x;

scanf проверка вводимого типа - C++
как узнать, что пользователь ввёл не число а строку, если от него требовалось первое и запрос проходил через функцию scanf?

Проверка на NULL строки типа Int - C++
Добрый день! в С++ можно сказать второй день Нужно после совершения действий выводить данные что было изменено и на что. ...

Проверка типа данных при вводе - C++
Задача: реализовать проверку на то, что пользователь ввёл целое число. Нашёл это: //Зачем использовать шаблон? template<class T>...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
01.04.2009, 18:40     Проверка типа #2
isInt() - функция проверки для типа int
типа
C++
1
if isInt(n) {......}
Unicode
0 / 0 / 0
Регистрация: 31.03.2009
Сообщений: 4
01.04.2009, 18:51  [ТС]     Проверка типа #3
А к какой библиотеке относится isInt?
БурундукЪ
9534 / 2531 / 66
Регистрация: 17.02.2009
Сообщений: 10,364
02.04.2009, 09:45     Проверка типа #4
<ctype.h>

Добавлено через 1 минуту 17 секунд
C++
1
if (isdigit(n))  {...}
так правильнее будет
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
02.04.2009, 11:44     Проверка типа #5
Не совсем понимаю, как эта проверка будет работать, ведь в переменную так или иначе будет что-то записано и это что-то будет иметь тип инт, так как переменная объявлена как инт. и даже если вообще ничего не записано, от этого тип переменной не изменится. Или я не прав?
NightmareZ
1339 / 562 / 37
Регистрация: 31.03.2009
Сообщений: 1,918
02.04.2009, 12:17     Проверка типа #6
Цитата Сообщение от Deicider Посмотреть сообщение
Не совсем понимаю, как эта проверка будет работать, ведь в переменную так или иначе будет что-то записано и это что-то будет иметь тип инт, так как переменная объявлена как инт. и даже если вообще ничего не записано, от этого тип переменной не изменится. Или я не прав?
Прав.
Alligieri
CEO
Эксперт С++
2248 / 1237 / 24
Регистрация: 16.03.2009
Сообщений: 3,581
02.04.2009, 19:38     Проверка типа #7
Цитата Сообщение от Бурундук Посмотреть сообщение
<ctype.h>

Добавлено через 1 минуту 17 секунд
C++
1
if (isdigit(n))  {...}
так правильнее будет
Насколько я помню для данной функции надо делать посимвольную проверку. Ответом на вопрос это будет только если сравнивать все введенные символы и 1 всередине будет не цифра, тогда число предположительно не целое
(например 1234.5678:
1 - цифра
2 - цифра
3- цифра
4- цифра
. - не цифра
5 - цифра
6 - цифра и т.д.)
Вот такую проверку можно сделать. А в целом тип сам обрежет ввод под целое число и прога проработает коректно, но результат пользователь получит не тот что хотел (ну тут как говорится как застелили так и выспались, надо предупреждения про диапазоны ввода выводить на екран).
stels
2 / 1 / 0
Регистрация: 02.04.2009
Сообщений: 28
02.04.2009, 20:37     Проверка типа #8
"А в целом тип сам обрежет ввод под целое число и прога проработает...."А якщо паралельно змінну записати ше в змінну типу float і порівняти!
C++
1
2
3
4
5
float a; int b;
cout<<"введем число"; cin>>a;
b=a;
 if(a==b) \\хай валяє
  else  \\виводимо повідомлення
Alligieri
CEO
Эксперт С++
2248 / 1237 / 24
Регистрация: 16.03.2009
Сообщений: 3,581
02.04.2009, 21:19     Проверка типа #9
Цитата Сообщение от stels Посмотреть сообщение
"А в целом тип сам обрежет ввод под целое число и прога проработает...."А якщо паралельно змінну записати ше в змінну типу float і порівняти!
C++
1
2
3
4
5
float a; int b;
cout<<"введем число"; cin>>a;
b=a;
 if(a==b) \\хай валяє
  else  \\виводимо повідомлення
Неплохой вариант, но вот число 11.0000001 в формате float воспринимается так же как и int. Конечно можно всегда стараться опережать такую ситуацию и задавать более длинные типы, но способ унифицырованным не назвешь но все равно хорош для многих задач
kazak
3033 / 2354 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
03.04.2009, 13:47     Проверка типа #10
Цитата Сообщение от Deicider Посмотреть сообщение
Не совсем понимаю, как эта проверка будет работать, ведь в переменную так или иначе будет что-то записано и это что-то будет иметь тип инт, так как переменная объявлена как инт. и даже если вообще ничего не записано, от этого тип переменной не изменится. Или я не прав?
не совсем, если введенное значение будет начинаться не с цифры(а например с буквы или с точки и т.д.), то переменная ничего не получит - проверенно
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
03.04.2009, 14:17     Проверка типа #11
Цитата Сообщение от kazak Посмотреть сообщение
если введенное значение будет начинаться не с цифры(а например с буквы или с точки и т.д.), то переменная ничего не получит - проверенно
Я и говорю:
и даже если вообще ничего не записано, от этого тип переменной не изменится
Так что описанная проверка не катит.

Вот это предложение самое дельное было:
C++
1
2
3
4
5
float a; int b;
cout<<"введем число"; cin>>a;
b=a;
 if(a==b) \\хай валяє
  else  \\виводимо повідомлення
Неплохой вариант, но вот число 11.0000001 в формате float воспринимается так же как и int. Конечно можно всегда стараться опережать такую ситуацию и задавать более длинные типы, но способ унифицырованным не назвешь но все равно хорош для многих задач
Ну это уже вопрос не типа, а ограничения на длину переменной.
YurA_280784
Заблокирован
03.04.2009, 14:33     Проверка типа #12
Чего не сделать вот так
C++
1
2
3
4
5
6
7
8
9
10
11
char chBuf[256];
cin>>chBuf;
int i;
while(chBuf[i] != '\0' && isdigit(chBuf[i]))
 i++;
if(i < strlen(chBuf) - 1)
 cout<<"Vvedeno ne chislo\r\n";
else
{
     //Делаем всё то если chBuf число...
}
Deicider
96 / 52 / 1
Регистрация: 18.03.2009
Сообщений: 273
03.04.2009, 14:52     Проверка типа #13
Цитата Сообщение от YurA_280784 Посмотреть сообщение
Чего не сделать вот так ...
Только перед тем, как что-то делать дальше, нужно из символьного chBuf получить int:

C++
1
2
3
4
5
6
7
8
int x=0;
for (int i = strlen(chBuf) - 1; i > 0;  i--)
{
if (i > 1)
    x += (chBuf[i] - 48) * 10 * (i-1); // 48  - это ASCII код нуля.
else
    x += (chBuf[i] - 48); 
}
И всё это удовольствие работает только для беззнаковых. Если ввести минус, то не пройдет проверка isdigit.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2009, 15:36     Проверка типа
Еще ссылки по теме:

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

Проверка типа вводимого с клавиатуры элемента - C++
Я создаю массив элементов типа double, ввод элементов с клавиатуры! Как мне проверить вводит ли пользователь именно числа, а не что то...

Проверка вводимых данных на соответствие типа - C++
Задание само очень простое - вычитание матриц, с помощью перегрузки функций (одна функция вычитает типы short, другая long double). ...

Проверка числа типа double на чётность/нечётность - C++
В программе необходимо проверить число типа double на то, является оно четным или нет. Это возможно как-то сделать или нет? Обычный метод,...

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


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

Или воспользуйтесь поиском по форуму:
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
03.04.2009, 15:36     Проверка типа #14
C++
1
2
3
4
5
    int val;
    std::cin>>val;
    char ch;
    if (!std::cin.good()||(std::cin.get(ch) && ch!='\n'))
        std::cout<<"Error!\n";
Yandex
Объявления
03.04.2009, 15:36     Проверка типа
Ответ Создать тему
Опции темы

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