Помощь с доработкой задачи на C++

Shapranov Pavel
На сайте с 27.08.2007
Offline
304
607

Привет всем обитателям раздела :)

Столкнулся с такой проблемой..

Есть простенькая задача на с++ переводящая число из 10 системы счисления в 16. Число для перевода вводится с клавиатуры.

Нужно сделать, чтобы число бралось из файла, т.е. программку нужно немного доработать, должно быть несложно. Если кто разбирается, помогите, буду благодарен :)

/*
Программа переводит числа из 10-ой системы счисления в 16-ую
*/

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>

using namespace std;

int preobr(int y) // функция преобразования в 16-ое число
{
char s[11];
int m[11];
int o,c,d,i,k,j;
i=0;
o=0;
c=y;
d=0;
while (c!=0)
{
o=c%16;
c=c/16;
m=o;
i=i+1;
}
k=i-1; // определяем номер последнего заполненного элемента массива m
j=0;
for (i=k;i>-1;i--) // конвертируем числа в 16-ый код
{
if (m==0) s[j]='0';
if (m==1) s[j]='1';
if (m==2) s[j]='2';
if (m==3) s[j]='3';
if (m==4) s[j]='4';
if (m==5) s[j]='5';
if (m==6) s[j]='6';
if (m==7) s[j]='7';
if (m==8) s[j]='8';
if (m==9) s[j]='9';
if (m==10) s[j]='A';
if (m==11) s[j]='B';
if (m==12) s[j]='C';
if (m==13) s[j]='D';
if (m==14) s[j]='E';
if (m==15) s[j]='F';
j=j+1;
}
s[k+1]='\0'; // заносим 0-ой символ в конец строки
if (y==0) printf("0 \n"); else
printf("%s \n",s);
return 0;
}


int main(int argc, char *argv[])
{
int x;
char c[10];
x=0;
do
{
printf("Vvedite celoe chislo: \n");
scanf("%s",&c);
x=atoi(c);
}
while ((x==0) && (c[0]!='\0') && (c[0]!='0'));

preobr(x);
system("PAUSE");
return 0;
}
[Удален]
#1

я вот не понял :)

чем вам - http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

не угодил?

Shapranov Pavel
На сайте с 27.08.2007
Offline
304
#2
bearman:
я вот не понял :)

чем вам - http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/

не угодил?

Для меня программирование это тёмный лес :)

[Удален]
#3

int main(int argc, char *argv[])

{

int x;

char c[10];

x=0;

FILE * pFile;

char с[10];

pFile = fopen ("myfile.txt" , "r");

if (pFile == NULL) perror ("Error opening file");

else {

fgets (с , 10 , pFile);

fclose (pFile);

x=atoi(c);

preobr(x);

}

system("PAUSE");

return 0;

}

O3
На сайте с 17.11.2008
Offline
127
#4

char* preobr(int y)

{

static char buf[10];

sprintf(char, "0x%X", y);

return buf;

}

Shapranov Pavel
На сайте с 27.08.2007
Offline
304
#5
MOP1:
int main...

Не заработал твой вариант, при любом значении в файле, отдается 0.

Всё ещё нужна помощь.

/*
Программа переводит числа из 10-ой системы счисления в 16-у, значения берёт из файла
*/

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>

using namespace std;

int preobr(int y) // функция преобразования в 16-ое число
{
char s[11];
int m[11];
int o,c,d,i,k,j;
i=0;
o=0;
c=y;
d=0;
while (c!=0)
{
o=c%16;
c=c/16;
m=o;
i=i+1;
}
k=i-1; // определяем номер последнего заполненного элемента массива m
j=0;
for (i=k;i>-1;i--) // конвертируем числа в 16-ый код
{
if (m==0) s[j]='0';
if (m==1) s[j]='1';
if (m==2) s[j]='2';
if (m==3) s[j]='3';
if (m==4) s[j]='4';
if (m==5) s[j]='5';
if (m==6) s[j]='6';
if (m==7) s[j]='7';
if (m==8) s[j]='8';
if (m==9) s[j]='9';
if (m==10) s[j]='A';
if (m==11) s[j]='B';
if (m==12) s[j]='C';
if (m==13) s[j]='D';
if (m==14) s[j]='E';
if (m==15) s[j]='F';
j=j+1;
}
s[k+1]='\0'; // заносим 0-ой символ в конец строки
if (y==0) printf("0 \n"); else
printf("%s \n",s);
return 0;
}


int main(int argc, char *argv[])
{
int x;
char c[10];
x=0;
FILE * pFile;
char с[10];

pFile = fopen ("myfile.txt" , "r");
if (pFile == NULL) perror ("Error opening file");
else {
fgets (с , 10 , pFile);
fclose (pFile);
x=atoi(c);
preobr(x);
}


system("PAUSE");
return 0;
}
I
На сайте с 07.10.2009
Offline
10
#6

Если еще актуально держите, путь к файлу замените на тот что вам нужно, можно относительный. Извините, неудержался и немножко подчистил ваш код


#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

using namespace std;

void preobr(int y) // функция преобразования в 16-ое число
{
char s[11];
int m[11];
int c = y,
i = 0,
j = 0;
while (c!=0) {
m=c%16;
c=c/16;
i++;
}
int k=i-1; // определяем номер последнего заполненного элемента массива m
for (i=k, j=0;i>-1;i--,j++) // конвертируем числа в 16-ый код
{
if ((m >= 0) && (m <=9))
s[j] = m + '0';
if ((m >= 10) && (m <=15))
s[j] = m-10 + 'A';
}
s[k+1]='\0'; // заносим 0-ой символ в конец строки
if (y==0)
printf("0 \n");
else
printf("%s \n",s);
}


int main(int argc, char *argv[])
{
int x = 0;
string str;
fstream myfile("d:\\example.txt",ios::in);
if (myfile.is_open())
if (!myfile.eof()) {
getline(myfile, str);
istringstream i(str);
i >> x;
preobr(x);
}
myfile.close();
cin.ignore();
return 0;
}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий