Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [С++] проблемка с указателями


Автор: Malish 15.11.2009, 21:13
Здравствуйте.

Суть программы в том, что массив десятичных чисел необходимо перевести в массив 16-тиричных.

Код

#include<iostream.h>
#include<conio.h>

void main()
{
char *Mas_16[3];
int Mas_10[3] = {14,78,100};

for(int i = 0; i<3; i++)
{
int Ostatok;
int Celoe = Mas_10[i];
char *Result = "";

while(Celoe != 0)
{
Ostatok = Celoe%16;
Celoe = Celoe/16;

switch(Ostatok)
{
case 1: strcat(Result,"1"); break;
case 2: strcat(Result,"2"); break;
case 3: strcat(Result,"3"); break;
case 4: strcat(Result,"4"); break;
case 5: strcat(Result,"5"); break;
case 6: strcat(Result,"6"); break;
case 7: strcat(Result,"7"); break;
case 8: strcat(Result,"8"); break;
case 9: strcat(Result,"9"); break;
case 10: strcat(Result,"A"); break;
case 11: strcat(Result,"B"); break;
case 12: strcat(Result,"C"); break;
case 13: strcat(Result,"D"); break;
case 14: strcat(Result,"E"); break;
case 15: strcat(Result,"F"); break;
}

}
cout<<strrev(Result)<<"\r\n";
Mas_16[i] = Result;
}

for(int i = 0; i<3; i++)
{
cout<<Mas_16[i]<<" ";
}
getch();
}


Результат выполнения программы:
http://ipicture.ru/Gallery/Viewfull/26906671.html

Я понимаю, почему Mas_16 состоит из одних и тех же значений, но пока мне ни чего в голову не приходит как это исправить.

Помогите пожалуйста.

Автор: 586 16.11.2009, 00:52
Код
#include<iostream.h>
#include<conio.h>
void main()
{
char Mas_16[3][16]={0};                // выделена память под три "строки" размером 16 байтов
int Mas_10[3] = {14,78,100};
for(int i = 0; i<3; i++)
{
int Ostatok;
int Celoe = Mas_10[i];
char *Result = Mas_16[i];     // указатель на одну из трёх строк
while(Celoe != 0)
{
Ostatok = Celoe%16;
Celoe = Celoe/16;
switch(Ostatok)
{
case 1: strcat(Result,"1"); break;
case 2: strcat(Result,"2"); break;
case 3: strcat(Result,"3"); break;
case 4: strcat(Result,"4"); break;
case 5: strcat(Result,"5"); break;
case 6: strcat(Result,"6"); break;
case 7: strcat(Result,"7"); break;
case 8: strcat(Result,"8"); break;
case 9: strcat(Result,"9"); break;
case 10: strcat(Result,"A"); break;
case 11: strcat(Result,"B"); break;
case 12: strcat(Result,"C"); break;
case 13: strcat(Result,"D"); break;
case 14: strcat(Result,"E"); break;
case 15: strcat(Result,"F"); break;
}
}
cout<<strrev(Result)<<"\r\n";
}
for(int i = 0; i<3; i++)
{
cout<<Mas_16[i]<<" ";
}
getch();
}

Автор: Dov 16.11.2009, 01:45
кстати, вот это всё:
Код
switch(Ostatok)
{
case 1: strcat(Result,"1"); break;
case 2: strcat(Result,"2"); break;
case 3: strcat(Result,"3"); break;
case 4: strcat(Result,"4"); break;
case 5: strcat(Result,"5"); break;
case 6: strcat(Result,"6"); break;
case 7: strcat(Result,"7"); break;
case 8: strcat(Result,"8"); break;
case 9: strcat(Result,"9"); break;
case 10: strcat(Result,"A"); break;
case 11: strcat(Result,"B"); break;
case 12: strcat(Result,"C"); break;
case 13: strcat(Result,"D"); break;
case 14: strcat(Result,"E"); break;
case 15: strcat(Result,"F"); break;
}


можно записать одной строкой:
Код
sprintf(Result + strlen(Result), "%X", Ostatok);

Автор: 586 16.11.2009, 04:48
Цитата(Dov @  16.11.2009,  01:45 Найти цитируемый пост)
можно записать одной строкой:

Там вообще всё можно сделать одной строкой  smile 
Код
#include <stdio.h>

void main()
{
    char Mas_16[3][16]={0};                // выделена память под три "строки" размером 16 байтов
    int Mas_10[3] = {14,78,100};
    for(int i = 0; i<3; i++)
    {
         sprintf(Mas_16[i], "%X", Mas_10[i]);
    }
}

Автор: Dov 16.11.2009, 09:54
 smile    smile 

Автор: Malish 16.11.2009, 11:28
Спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)