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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
#1

Как запретить компилятору неявное преобразование из числового типа в символьный? - C++

09.08.2008, 23:29. Просмотров 1801. Ответов 6
Метки нет (Все метки)

У мя возникла такая проблема: я ввожу данные типа char и мне надо быть уверенным, что я ввел именно символ, т.е. если я ввожу число мне нужно об этом как-то узнать...это было бы легко сделать, если запретить компилятору преобразовывать из числового типа в символьный. Это реально сделать и как? Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2008, 23:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как запретить компилятору неявное преобразование из числового типа в символьный? (C++):

Неявное преобразование типа - C++
Привет. Решаю задачу, не могу решить проблему. Есть класс 'time' и производный от него класс 'interval'. 1 - содержит поля h, m, s,...

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

Не работает явное преобразование типа, а неявное работает. - C++
Опечатался. Не работает явное преобразования, а не явное работает. Есть класс( не обращайте внимание на члены данные класса ): class...

Запретить неявное приведение - C++
Нужна функция с двумя формальными параметрами типа uint64_t, требуется запретить неявное приведение фактических параметров к этому типу,...

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

неявное преобразование в C++ - C++
Здравствуйте! При работе с проектом на Qt, компилятор выдал ошибку: "undefined reference to vtable". Порывшись в интернете, нашел статью,...

6
XuTPbIu_MuHTAu
Эксперт С++
2226 / 741 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
10.08.2008, 00:11 #2
Думаю,проблема не в этом. Цифра есть символ. Попробуйте оспорить.
Как следствие того,что цифра - символ,компилятор ничего не преобразовывает.
Проверить,является ли символ цифрой - очень просто.
Код
сhar c;
cin >> c;
if ( (c>='0') && c <='9') ; // введена цифра.
else ; //введена не цифра
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
10.08.2008, 00:54 #3
а еще есть функции itoa() и atoi(). собссно переводят из целых чисел в строки и наоборот. вот только я забыл какой хедер нужен
0
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
10.08.2008, 01:03  [ТС] #4
Мне просто надо отследить ошибку ввода, если я вместо символа введу например 2-х значное число, то cin.good() не реагирует..
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
10.08.2008, 01:17 #5
сhar c;
cin >> c;
if ( (c>='0') && c <='9') ; // введена цифра.
else ; //введена не цифра
тут же в таблице аски кодов 0,1,2....9 идут подряд. выходит за эти рамки - не цифра. просто проверка условия и всё
0
NetGod
93 / 2 / 0
Регистрация: 12.06.2008
Сообщений: 84
10.08.2008, 14:33 #6
Ещё можно заметит закономерность того, что при приведении какого либо символа к целочисленному типу, он возвращает отрицательное число.
Следовательно:
C++
1
2
3
4
5
6
7
char x;
cin >> x;
if(((int)x) > 0)
{
cout << "Вы ввели не символ!\n";
return main();
}
Полный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
int main()
{
    char x;
    std::cin >> x;
    if(((int)x) > 0)
    {
        std::cout << "Вы ввели не символ!\n";
        return main();
    }
    else
    {
        std::cout << x << "\n";
    }
    return 0;
}
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,379
10.08.2008, 15:06 #7
Это утверждение неверно.
Во-первых, символы английского алфавита, цифры, знаки препинания и т.д. имеют ASCII-коды в диапазоне 0x00-0x7F, и эти символы при приведении к int всегда будут давать положительное число. А вот с символами в диапазоне 0x80-0xFF (буквы русского алфавита и разные спецсимволы) все хитрее - зависит от опции default char type - signed или unsigned. Если по умолчанию символьный тип беззнаковый, то и эти символы будут всегда давать положительное число. А вот если знаковый - то отрицательное.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2008, 15:06
Привет! Вот еще темы с ответами:

Неявное преобразование переменных - C++
Добрый вечер! Хочу попросить помощи в разъяснении следующей ситуации: есть код: #include &lt;iostream&gt; using namespace std; ...

Неявное преобразование типов? - C++
есть класс Vector затем с его помощью создается класс Matrix (матрица - массив векторов) дошла очередь до операции умножения матрицы...

Неявное преобразование типов - C++
если я правильно понял, то explicit работает таким образом: class abc { int x; public: abc(int x_):x(x_){} ~abc(){} };

Неявное преобразование типов - C++
Здравствуйте, определен класс: template&lt;typename T&gt; class Polynomial { public: explicit...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
10.08.2008, 15:06
Ответ Создать тему
Опции темы

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