Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/65: Рейтинг темы: голосов - 65, средняя оценка - 4.55
3 / 3 / 0
Регистрация: 26.09.2009
Сообщений: 104
1

Проверка типа вводимых данных.

01.10.2009, 18:38. Показов 13498. Ответов 13
Метки нет (Все метки)

Собственно,как осуществить ?

К примеру,здесь:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main() {
    
    int x;
    int y;
    cin >> x;
    y = (int) x;
    if (x != y) {
            
            cout << "ERROR!";
            getch();
            
            }
            
            else {
                 
                 cout << x;
                 getch();
                 
                 }
                 
                 }
Думал,прокатит...Походу компиль автоматом переводит строку в её числовое представление,хоть и непонятно,какое.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2009, 18:38
Ответы с готовыми решениями:

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

Проверка вводимых данных
#include &lt;iostream&gt; using namespace std; int main() { double a, b, c; cout &lt;&lt;...

Проверка вводимых данных
Подскажите, пожалуйста, как зациклить ввод данных до тех пор пока пользователь не введёт корректный...

Проверка вводимых данных
Доброго времени суток, форумчане. Я столкнулся с такой проблемой: при введении еденицы измерения,...

13
Эксперт JavaЭксперт С++
8366 / 3587 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
01.10.2009, 19:08 2
компилятор нормальный, просто иногда полезно понимать что ты заставляешь делать компилятор. Вот эта строка
C++
1
(int) x
возвращает ASCII код числа записанного в x. Так например если в x будет записан 0, то вполне естественно, что в y будет не 0, как ты предполагал, а ровно 48!
Если интересно, то смотри аттач
1
Вложения
Тип файла: rar ASCII.rar (3.8 Кб, 81 просмотров)
MCSD: APP BUILDER
8791 / 1069 / 104
Регистрация: 17.06.2006
Сообщений: 12,603
01.10.2009, 19:10 3
Welemir,
Походу компиль автоматом переводит строку в её числовое представление

а нафига ты строку пытаешься запихнуть в число?
0
Эксперт JavaЭксперт С++
8366 / 3587 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
01.10.2009, 19:16 4
Собственно строки-то никакой и нет. Это не java и не C# которые читают сначала строки.
Welemir, почитай книгу что-ли. Просто допускать такие элементарные ошибки...
0
77 / 77 / 29
Регистрация: 01.08.2009
Сообщений: 177
01.10.2009, 19:48 5
Я прочитал и решил попробовать.
И че то не пойму, а как так сделать. я если пишу:
C++
1
y =(int)x;
то он мне выводит число, я введу 5 он мне 5. если введу букву то ничего не выводит сразу закрывает. Если поменяю х на чар тоже закрывает. ничего не понимаю.
0
3 / 3 / 0
Регистрация: 26.09.2009
Сообщений: 104
01.10.2009, 20:39  [ТС] 6
А название темы ни о чём не говорит ?.Мне нужно определить,какие данные вводит пользователь.В рнр это можно сделать,так почему же в С/С++ нельзя ?Хотя... неужели коды каждого символа проверять?))).
0
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
01.10.2009, 20:56 7
Цитата Сообщение от Welemir Посмотреть сообщение
А название темы ни о чём не говорит ?.Мне нужно определить,какие данные вводит пользователь.В рнр это можно сделать,так почему же в С/С++ нельзя ?Хотя... неужели коды каждого символа проверять?))).
да, а почему нет? их всего-то 255. цифры сгрупированны, буквы тоже кучно идут.
0
3 / 3 / 0
Регистрация: 26.09.2009
Сообщений: 104
01.10.2009, 21:05  [ТС] 8
Да нет,просто полагал,что есть какой-нибудь оператор проверки типо is_int(),(int) или gettype(),как в РНР...Просто,на мой взгляд,это не слишком-то рациональное решение...

Добавлено через 1 минуту
Цитата Сообщение от breeve Посмотреть сообщение
то он мне выводит число, я введу 5 он мне 5. если введу букву то ничего не выводит сразу закрывает. Если поменяю х на чар тоже закрывает. ничего не понимаю.
Полагаю,дело ещё и в компиляторе...Некоторые из них могут вообще чудеса творить...
0
Эксперт JavaЭксперт С++
8366 / 3587 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
01.10.2009, 22:57 9
Цитата Сообщение от Welemir Посмотреть сообщение
Полагаю,дело ещё и в компиляторе...Некоторые из них могут вообще чудеса творить...
Welemir, запомни главное правило начинающего программиста:
"Компилятор всегда прав!"
посмотри этот
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
int main()
{
    char s;
    std::cin>>s;
    if(isdigit(s))
        std::cout<<"digit"<<std::endl;
    else
        std::cout<<"symbol"<<std::endl;
    system("pause");
    return 0;
}
или делай проверку по коду символа
0
2808 / 1399 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
01.10.2009, 23:02 10
M128K145, для isdigit() вроде бы ctype.h нужен.
0
Эксперт JavaЭксперт С++
8366 / 3587 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
01.10.2009, 23:10 11
Monte-Cristo, да нет вроде. У меня и так работает, хотя isdigit действительно описан в ctype.h
0
2 / 2 / 0
Регистрация: 14.10.2018
Сообщений: 11
07.09.2019, 19:27 12
Конечно дебильно апать старую темку но вот сделал прогу которая просит снова ввести, если ты ввел символ а не int.
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include "ctype.h"
 
using namespace std;
 
int main()
{
    int variable;
    char check;
    int point = 0;
    do
    {
        cout << "Enter only number" << endl;
        cin >> check;
        if (isdigit(check))
        {
            variable = (int)check;
            point = 1;
        }
    } while (point != 1);
 
    _getch();
    return 0;
}
Добавлено через 21 минуту
Ну тут крч я сделал ошибку, ибо выводит оно в итоге не ту цифру что ввели а код ascii.
Вот так будет выводить цифру или число
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 "stdafx.h"
#include <iostream>
#include <conio.h>
#include "ctype.h"
#include <cstdlib>
 
using namespace std;
 
int main()
{
    int variable;
    char check[256];
    int point = 0;
    do
    {
        cout << "Enter only number" << endl;
        cin >> check;
        if (isdigit(check[0]))
        {
            variable = atoi(check);
            point = 1;
        }
    } while (point != 1);
    cout << variable << endl;
    _getch();
    return 0;
}
0
С чаем беда...
Эксперт CЭксперт С++
9072 / 4604 / 1250
Регистрация: 18.10.2014
Сообщений: 10,302
07.09.2019, 20:05 13
Цитата Сообщение от Marikhaker Посмотреть сообщение
Вот так будет выводить цифру или число
И что же за число я должен получить в ответ на 3vasya5? В ответ на пробел-123? И почему я не могу ввести -3?
0
2 / 2 / 0
Регистрация: 14.10.2018
Сообщений: 11
08.09.2019, 00:45 14
Ну ваше хз чо дальше. Как решать будем?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2019, 00:45

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Проверка вводимых данных.
предполагается, что функция будет проверять, что ввел пользователь, и, если он ввел не натуральное...

Проверка вводимых данных
Вот часть программы int main(void) { int vop; setlocale(LC_ALL, &quot;Russian&quot;); int mas1,...

Проверка вводимых данных
Как сделать так, чтобы при вводе символов в строку года поступления на экран появлялось...

Определение типа вводимых данных
Здравствуйте. Мне, как новичку, нужна помощь. Я делаю программу для работ с функциями. В начале...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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