Problema cambio de hexadecimal y octal a decimal

Iniciado por Turakam, 13 Noviembre 2014, 12:01 PM

0 Miembros y 2 Visitantes están viendo este tema.

Turakam

Buenas, tengo un problema que no se resolver. Tengo que leer de una entrada estandar y convertir los numeros hexadecimal y octal que encuentre a decimal, pero volviendo a ponerlos en la entrada.

Alguien me puede ayudar?

THX!

eferion


Turakam

No tengo practicamente nada, o se como plantearlo siquiera...

eferion

sacado de la hoja de referencia de la función printf



















d or iSigned decimal integer392
uUnsigned decimal integer7235
oUnsigned octal610
xUnsigned hexadecimal integer7fa
XUnsigned hexadecimal integer (uppercase)7FA
fDecimal floating point, lowercase392.65
FDecimal floating point, uppercase392.65
eScientific notation (mantissa/exponent), lowercase3.9265e+2
EScientific notation (mantissa/exponent), uppercase3.9265E+2
gUse the shortest representation: %e or %f392.65
GUse the shortest representation: %E or %F392.65
aHexadecimal floating point, lowercase-0xc.90fep-2
AHexadecimal floating point, uppercase-0XC.90FEP-2
cCharactera
sString of characterssample
pPointer addressb8000000
%A % followed by another % character will write a single % to the stream.%

Con esto deberías ser capaz de configurar el printf para que saque la información como tu quieres.

Un saludo

rir3760

Cita de: Turakam en 13 Noviembre 2014, 12:01 PMTengo que leer de una entrada estandar y convertir los numeros hexadecimal y octal que encuentre a decimal, pero volviendo a ponerlos en la entrada.
Deberías colocar el enunciado completo del ejercicio así como indicar que partes puedes realizar y en cuales tienes dificultades siempre entendiendo que las reglas de los foros prohíben hacer tareas ajenas.

La obtención de los números en base 8 o 16 la puedes realizar utilizando la función scanf con los especificadores de formato que ya indico eferion o bien la lectura debe ser de forma manual, eso lo debes aclarar tu.

En cuanto a regresarlos a la entrada estándar supongo es un error y la intención es enviarlos a la salida estándar, para ello basta con la función printf y el especificador "%d".

En todo caso ejemplos de todo ello hay a montones en la base de datos de los foros, solo es cuestión de utilizar el motor de búsqueda.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Turakam

#5
El enunciado es este: Escribe un programa que lea de la entrada estándar y convierta a decimal todos los números que encuentra, extrayéndolos en la salida estándar. Si encuentra un número en octal o en hexadecimal, debe ser convertido. Del mismo modo, detectará que los números contienen decimales y los mostrará de forma correcta

Y este es el codigo que tengo hasta ahora:

#include <stdio.h>
#include <ctype.h>

main ()
{
int c,i;
int hexa_n, octal_n;
char str[100];

printf ("Escribe un texto incluyendo numeros en hexadecimal y octal: \n");
scanf ("%s",&str);
for (i = 0; i <= strlen(str); i++)
if (isxdigit(str[i]) != 0);
{
hexa_n = strtol(str,NULL,16);
printf ("El numero hexadecimal %X es %d\n",hexa_n,hexa_n);
}
}


El problema es que en este código solo me lee desde la primera posición y necesito que si por ejemplo tengo "Hola mundo A2", me tiene que leer el A2 y pasarmelo a decimal, pero con mi codigo me leeria la H y no funcionaria, una ayudita!!!