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

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

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

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

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

У мя возникла такая проблема: я ввожу данные типа char и мне надо быть уверенным, что я ввел именно символ, т.е. если я ввожу число мне нужно об этом как-то узнать...это было бы легко сделать, если запретить компилятору преобразовывать из числового типа в символьный. Это реально сделать и как? Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2008, 23:29     Как запретить компилятору неявное преобразование из числового типа в символьный?
Посмотрите здесь:
C++ Неявное преобразование типа
C++ Неявное преобразование типа данных через структуры
C++ Не работает явное преобразование типа, а неявное работает.
Запретить неявное приведение C++
Запретить неявное приведение возвращаемого значения C++
C++ Неявное преобразование типов
C++ Неявное преобразование типов?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
10.08.2008, 00:11     Как запретить компилятору неявное преобразование из числового типа в символьный? #2
Думаю,проблема не в этом. Цифра есть символ. Попробуйте оспорить.
Как следствие того,что цифра - символ,компилятор ничего не преобразовывает.
Проверить,является ли символ цифрой - очень просто.
Код
сhar c;
cin >> c;
if ( (c>='0') && c <='9') ; // введена цифра.
else ; //введена не цифра
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
10.08.2008, 00:54     Как запретить компилятору неявное преобразование из числового типа в символьный? #3
а еще есть функции itoa() и atoi(). собссно переводят из целых чисел в строки и наоборот. вот только я забыл какой хедер нужен
Леонид ГаниполЯ
3 / 3 / 0
Регистрация: 01.08.2008
Сообщений: 65
10.08.2008, 01:03  [ТС]     Как запретить компилятору неявное преобразование из числового типа в символьный? #4
Мне просто надо отследить ошибку ввода, если я вместо символа введу например 2-х значное число, то cin.good() не реагирует..
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 идут подряд. выходит за эти рамки - не цифра. просто проверка условия и всё
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2008, 15:06     Как запретить компилятору неявное преобразование из числового типа в символьный?
Еще ссылки по теме:
C++ Неявное преобразование типов
Неявное преобразование переменных C++
C++ Объясните неявное преобразование в этом случае
Неявное восходящее преобразование при защищенном/закрытом наследовании C++
Продемонстровать неявное преобразование типов: из целого в вещественный и обратно C++

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

Или воспользуйтесь поиском по форуму:
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,353
10.08.2008, 15:06     Как запретить компилятору неявное преобразование из числового типа в символьный? #7
Это утверждение неверно.
Во-первых, символы английского алфавита, цифры, знаки препинания и т.д. имеют ASCII-коды в диапазоне 0x00-0x7F, и эти символы при приведении к int всегда будут давать положительное число. А вот с символами в диапазоне 0x80-0xFF (буквы русского алфавита и разные спецсимволы) все хитрее - зависит от опции default char type - signed или unsigned. Если по умолчанию символьный тип беззнаковый, то и эти символы будут всегда давать положительное число. А вот если знаковый - то отрицательное.
Yandex
Объявления
10.08.2008, 15:06     Как запретить компилятору неявное преобразование из числового типа в символьный?
Ответ Создать тему
Опции темы

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