elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problemas con long long int
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problemas con long long int  (Leído 3,699 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
problemas con long long int
« en: 13 Marzo 2014, 00:37 am »

Saludos
Tengo un codigo en el que tengo que pedirle a un usuario que me ingrese un numero de tipo long long int, y después tengo que escribir ese número en un archivo de texto, lo tengo que hacer dígito por dígito porque no tengo que usar cadenas, el problema es que me imprime basura y no entiendo por qué, el problema lo tengo creo yo, en el fwrite()

Código
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #define MAX 40
  5.  
  6. using namespace std;
  7.  
  8. void escribirNumero(long long int numero,FILE *fd);
  9.  
  10. int main()
  11. {
  12.    long long int numero;
  13.    FILE *fd;
  14.    int digito,x;
  15.    if((fd = fopen("Practica1.txt","w"))!= NULL)
  16.    {
  17.        cout << "Dame el numero: " << endl;
  18.        cin >> numero;
  19.        cout << "Que digito desea buscar? " << endl;
  20.        cin >> digito;
  21.        escribirNumero(numero,fd);
  22.    }
  23.    else
  24.       printf("No se pudo crear archivo\n");
  25.    return 0;
  26. }
  27.  
  28. void escribirNumero(long long int numero,FILE *fd)
  29. {
  30.    long long int cociente,residuo;
  31.    for(cociente = numero;cociente != 0;cociente = cociente/10)
  32.    {
  33.        residuo = cociente % 10;
  34.        fwrite(&residuo,12,1,fd);
  35.    }
  36. }

gracias


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: problemas con long long int
« Respuesta #1 en: 13 Marzo 2014, 00:51 am »

fwrite si no me equivoco, escribe valores tipo char, en este caso tu le estás dando por ejemplo "1" y el está escribiendo el valor ascii correspondiente a 1... puedes intentar sumando 48 a cada valor (&residuo+48) que es el valor correspondiente a ascii "0"


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: problemas con long long int
« Respuesta #2 en: 13 Marzo 2014, 02:01 am »

Lo que dijo englex, y además, ¿por qué escribes 12 bytes con el fread()? Si vas a escribir un dígito a la vez, basta con poner un solo carácter. Quedaría:
Código
  1. void escribirNumero(long long int numero, FILE *fd)
  2. {
  3. long long int cociente,residuo;
  4. for(cociente = numero; cociente != 0; cociente = cociente/10)
  5. {
  6.  residuo = cociente % 10;
  7.  residuo += 48; /* convertido a ASCII */
  8.  fwrite( &residuo, sizeof(char), 1, fd);
  9. }
  10. }
Eso sí, va escribiendo el número empezando con la cifra menos significativa, y terminando por la más significativa. Por ejemplo para el número 54.780 lo probé y me escribe 08745 lo cual está bien pero al revés. Tendrías que hacer una rutina para invertir las cifras.

En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problemas con long long int
« Respuesta #3 en: 13 Marzo 2014, 02:56 am »

Tengo un codigo en el que tengo que pedirle a un usuario que me ingrese un numero de tipo long long int, y después tengo que escribir ese número en un archivo de texto, lo tengo que hacer dígito por dígito porque no tengo que usar cadenas
El primer problema con ese programa es utilizar, en su mayoría, la biblioteca estándar de C. ¿Porque no utilizas la de C++?

Ademas si el stream se abre en modo texto lo mas fácil es utilizar fprintf, si no te permiten hacerlo puedes utilizar fwrite para almacenar el numero completo (no tienes porque almacenar dígito por dígito de esa forma).

Un saludo
En línea

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
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: problemas con long long int
« Respuesta #4 en: 13 Marzo 2014, 03:37 am »

gracias por sus respuestas, este es el primer programa que hago en c++, por eso no se utilizar su biblioteca estándar. ahora ya me funciona el codigo solo que cuando me imprime en el archivo de texto, por ejemplo si le digo que imprima 1578 me imprime

8   7  5  1... el problema no es que me los imprima al reves, lo que quiero es que me los imprima sin los espacios entre los numeros, que me quedara asi:

8751

¿por que me imprime espacios en blanco y como se los quito?
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problemas con long long int
« Respuesta #5 en: 13 Marzo 2014, 03:49 am »

el problema no es que me los imprima al reves
Porque esa es la aproximación que tomas en tu programa, si quieres imprimirlos en orden opciones hay varias, por ejemplo almacenar los dígitos en un array y solo entonces imprimirlos, crear una función recursiva, etc.

¿por que me imprime espacios en blanco y como se los quito?
Para ayudarte primero debes publicar el código fuente del programa.

Un saludo
En línea

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
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problemas con long long int
« Respuesta #6 en: 13 Marzo 2014, 06:12 am »


Creo que me he perdido algo en este tema. ¿Por qué no guardas directamente el número con fprinf?.

En fin, supongo que es un ejercicio en el que te proponen que lo hagas dígito a dígito. En tal caso tan solo tienes que voltear el número que te sale de entrada en la función, para lo cual uso una nueva variable aue almacene el número al revés, para luego voltearlo:


Código
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #define MAX 40
  5.  
  6. using namespace std;
  7.  
  8. void escribirNumero(long long int numero,FILE *fd);
  9.  
  10. int main()
  11. {
  12.    long long int numero;
  13.    FILE *fd;
  14.    int digito,x;
  15.    if((fd = fopen("Practica1.txt","w"))!= NULL)
  16.    {
  17.        cout << "Dame el numero: " << endl;
  18.        cin >> numero;
  19.        cout << "Que digito desea buscar? " << endl;
  20.        cin >> digito;
  21.        escribirNumero(numero,fd);
  22.    }
  23.    else
  24.       cout <<"No se pudo crear archivo<<endl";
  25.    return 0;
  26. }
  27.  
  28. void escribirNumero(long long int numero, FILE *fd)
  29. {
  30. long long int cociente,residuo=0,num=0;
  31. for(cociente = numero; cociente != 0; cociente = cociente/10)
  32. {
  33.  residuo = cociente % 10;
  34.  num=num*10+residuo*10;
  35. }
  36. num/=10;
  37. residuo=0;
  38. for(cociente = num; cociente != 0; cociente = cociente/10)
  39.  {
  40.  residuo = cociente % 10;
  41.  residuo += 48; /* convertido a ASCII */
  42.  fwrite( &residuo, sizeof(char), 1, fd);
  43.  /** o en lugar de fwrite puedes usar fprinf sin el '48'**/
  44.  ///fprintf(fd,"%lld",residuo);
  45. }
  46. }

Y aunque vengas del C, al menos pon las librerías con una c delante y sin el .h. Por lo menos que parezca que sabes C++, aunque también deberías usar als librerías y funciones propias del C++ para el tratamiento de ficheros. :)

El código que te planteo es sólo una opción entre otras y sin espacios entre los dígitos.


¡¡¡¡ Saluditos! ..... !!!!


En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: problemas con long long int
« Respuesta #7 en: 13 Marzo 2014, 17:59 pm »

También me pareción extraño que no eligió fprintf(). Creo que no se puede usar porque el problema dice "no se pueden usar cadenas", y como fprintf() dirige una salida formateada, de cierta forma está creando una cadena. Está obligado a trabajar "en bruto", o al menos eso es lo que pareciera.

De todos modos, que el autor del post aclare ...
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Function ConnectSock() As Long
Programación Visual Basic
saliaz 0 1,063 Último mensaje 13 Julio 2008, 18:00 pm
por saliaz
convertir long a rgb
Programación Visual Basic
<[(x)]> 3 5,658 Último mensaje 5 Marzo 2009, 07:56 am
por hechelion
de byte a long
Programación Visual Basic
claus86 3 3,075 Último mensaje 7 Marzo 2010, 18:27 pm
por LeandroA
Arrays de chars to long long
Programación C/C++
Xedrox 0 1,404 Último mensaje 24 Diciembre 2012, 01:03 am
por Xedrox
Long long to char
Programación C/C++
Xedrox 3 2,583 Último mensaje 5 Agosto 2013, 10:15 am
por amchacon
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines