С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
#1

Ошибка в преобразовании типов - C++

04.12.2013, 10:58. Просмотров 279. Ответов 9
Метки нет (Все метки)

Здравствуйте. Я написал программу, которая преобразует int в char через указатель. Программа работает, но криво. Например при вводе числа 222 выводит отрицательное значение, а так быть не должно. Помогите найти ошибку, заранее спасибо )
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <stdio.h>
using namespace std;
 
int main()
{
    int i, *p;
    cout<<"i="; cin>>i;
    p=&i;
    printf("%d\n", *((char*)p));
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 10:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в преобразовании типов (C++):

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

Странное поведение при преобразовании типов - C++
Доброго времени суток! Помогал товарищу написать простенькую программу. Задача состояла в том, чтобы при введенном дробном числе...

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

Ошибка в преобразовании строки в double - C++
Почему вот тут все правильно, то есть 5.5 остается 5.5: #include &lt;iostream&gt; void main( int ArgC, char *ArgV ) { char *str = new...

Ошибка при преобразовании int в fpos_t - C++
Всем привет, ругается на строчке приравнивания int Start_Pos_UnSorted_File; fpos_t position; position = Start_Pos_UnSorted_File; ...

В функции GetRandChar ошибка в преобразовании char в wchar_t - C++
Ошибка в заставе заключается в преобразовании char в wchar_t. Вот почему он жалуется на GetRandChar, я не пойм. Как исправить? ...

9
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:03 #2
Приведение указателей - не есть преобразование типов.
0
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
04.12.2013, 11:06  [ТС] #3
Возможно я не правильно выразился, мне нужно "Преобразовать указатель одного типа в указатель другого". В данном случае указатель типа int в char. )
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:16 #4
int выводится как char:
C++
1
2
3
4
int i, *p;
cout<<"i="; cin>>i;
p=&i;
printf("%c\n", *p);
Добавлено через 9 минут
Цитата Сообщение от Guyver Посмотреть сообщение
а так быть не должно
Если char знаковый, то должно.
1
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
04.12.2013, 11:18  [ТС] #5
Все равно не понимаю, задание "Преобразовать указатель одного типа в указатель другого", преподаватель зачел первый раз этот код, сказал все правильно. Потом при защите я случайно набрал значение 222, и у меня вывело отрицательное число, тогда преподаватель сказал что отрицательное число не должно получиться, значит у меня код неправильный)
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
04.12.2013, 11:22 #6
unsigned char
1
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:28 #7
Преобразовывается очень просто, просто приводится. А то что выводит отрицательрое число, при int больше 127, то зависит от реализации char (может быть знаковым, может беззнаковым). Если char знаковый, то, если введено 222 (11011110), указатель будет указывать на старший байт, старший бит - знак, поэтому выводится отрицательное число. Если хотите, чтобы выводило только положительные, то приводите к unsigned char*.
1
Guyver
0 / 0 / 0
Регистрация: 09.11.2013
Сообщений: 19
04.12.2013, 11:29  [ТС] #8
Всем большое спасибо, наконец-то понял, что к чему )
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.12.2013, 11:42 #9
Цитата Сообщение от alsav22 Посмотреть сообщение
указатель будет указывать на старший байт
На младший байт int (в памяти он будет первым, архитектура x86).
0
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
04.12.2013, 11:46 #10
Цитата Сообщение от Guyver Посмотреть сообщение
Потом при защите я случайно набрал значение 222, и у меня вывело отрицательное число, тогда преподаватель сказал что отрицательное число не должно получиться, значит у меня код неправильный
Преподаватель такой преподаватель :-) Про signed char и unsigned char никогда ничего не слышал.
0
04.12.2013, 11:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2013, 11:46
Привет! Вот еще темы с ответами:

Ошибка с комплексными числами при дискретном преобразовании Фурье - C++
пытаюсь реализовать дискретное преобразование фурье (не быстрое) подскажить в чем ошибка в коде ругается на...

Ошибка этапа исполнения при преобразовании символов в верхний регистр - C++
Доброго времени суток, уважаемые пользователи CyberForum.ru! По какой то причине падает программа, прощу Вашей помощи :) void main()...

Ошибка Error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден - C++
Вот задание. Для произвольного текста (Взятого из файла), содержащего не более 10 строк, в каждой строке не более 80 символов,...

Ошибка error LNK1123: сбой при преобразовании в COFF: файл недопустим или поврежден - C++
Объясните, пожалуйста, как исправить эту проблему? У меня Visual Studio 2010 Ultimate


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

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

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