Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Luchoz95 en 19 Abril 2013, 19:08 pm



Título: Ayuda con fprintf
Publicado por: Luchoz95 en 19 Abril 2013, 19:08 pm
Hola gente tengo un problema , va mas que un problema una consulta , vean esta linea de código ...

Código
  1. fprintf(miarchivo,"%s%s%d",nPersona.nombre,nPersona.apellido,nPersona.telefono);

esto va a escribir en un archivo de la siguiente manera ...
Citar
Nombre
Apellido
156XXXX
bueno yo lo que quiero es que se escriba asi ...
Citar
Nombre           Apellido          156XXXX

con algún tipo de tabulacion o algo por el estilo , algún consejo ? S2!


Título: Re: Ayuda con fprintf
Publicado por: pacoperico en 19 Abril 2013, 19:18 pm
Pues usa la secuencia de escape de la tabulacion que es \t en tu cadena de formato del frintf().


Título: Re: Ayuda con fprintf
Publicado por: rir3760 en 19 Abril 2013, 20:18 pm
yo lo que quiero es que se escriba asi ... con algún tipo de tabulacion o algo por el estilo , algún consejo?
Para imprimir en el archivo una linea de texto con el formato que mencionas puedes utilizar:
Código
  1.   miarchivo, "%-Xs%-Ys%-Zd",
  2.   nPersona.nombre,
  3.   nPersona.apellido,
  4.   nPersona.telefono
  5. );

En la cadena de formato "%-Xs%-Ys%-Zd" se utiliza "-" para indicar una alineación a la izquierda mientras que "X", "Y" y "Z" indican la anchura en caracteres de cada campo o columna.

Un saludo


Título: Re: Ayuda con fprintf
Publicado por: leosansan en 19 Abril 2013, 20:24 pm
Simple,claro y preciso. Me encantan tus lecciones rir3760. Siempre aprendiendo de tus respuestas.

Gracias por compartir tus amplísimos conocimientos  de C/C++ con los demás y "por nada".

Un fuerte saludo, "fenómeno".
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Ayuda con fprintf
Publicado por: Luchoz95 en 19 Abril 2013, 22:01 pm
sigo con el mismo problema , se hace un salto de linea aunque le agrege esto ..
Código
  1. fprintf(miarchivo,"%-50s%-50s%-50d",nPersona.nombre,nPersona.apellido,nPersona.telefono);

no se que ondaa :S


Título: Re: Ayuda con fprintf
Publicado por: rir3760 en 20 Abril 2013, 02:48 am
sigo con el mismo problema , se hace un salto de linea aunque le agrege esto ..
Código
  1. fprintf(miarchivo,"%-50s%-50s%-50d",nPersona.nombre,nPersona.apellido,nPersona.telefono);
La razón del avance de linea no es la llamada a función sino alguna de las cadenas. Lo mejor aquí es, cuando obtengas las cadenas, eliminar el avance de linea.

Si no es posible y alguna de ellas puede contener el mentado carácter se puede verificar y de ser necesario eliminarlo. Una opción es mediante la función strchr (prototipo en <string.h>), mas o menos así:
Código
  1. #include <string.h>
  2.  
  3. /* ... */
  4.  
  5. char *p;
  6.  
  7. /* ... */
  8.  
  9. p = strchr(nPersona.nombre, '\n');
  10. if (p != NULL)
  11.   *p = '\0';
  12.  
  13. p = strchr(nPersona.apellido, '\n');
  14. if (p != NULL)
  15.   *p = '\0';
  16.  
  17.   miarchivo, "%-50s%-50s%-50d",
  18.   nPersona.nombre, nPersona.apellido, nPersona.telefono
  19. );

Un saludo


Título: Re: Ayuda con fprintf
Publicado por: Luchoz95 en 20 Abril 2013, 03:35 am
eh probado con lo que me pasaste pero tampoco funciono , pero ya encontre el error , ahora tengo que solucionarlo ... el error esta en esta linea ...
Código
  1. fgets(nPersona.nombre,50,stdin);
ahora estoy usando scanf para leer los nombres y apellidos , pero no le tengo muchas confianza , algun consejo ? S2!


Título: Re: Ayuda con fprintf
Publicado por: rir3760 en 20 Abril 2013, 06:24 am
eh probado con lo que me pasaste pero tampoco funciono
El problema al solo comentar "no funciona" es que no hay forma de corregir el código fuente (el que sea).

pero ya encontre el error , ahora tengo que solucionarlo ... el error esta en esta linea ...
Código
  1. fgets(nPersona.nombre,50,stdin);
Con ello los campos nombre y apellido almacenaran el avance de linea como ultimo carácter, como ya te comente ese es el problema.

Un programa donde se muestra como eliminar el avance de linea e imprimir con formato:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_CHARS  256
  6.  
  7. struct reg {
  8.   char nombre[MAX_CHARS];
  9.   char apellido[MAX_CHARS];
  10.   long telefono;
  11. };
  12.  
  13. int main(void)
  14. {
  15.   struct reg nPersona;
  16.   char *p;
  17.  
  18.   puts("Nombre:");
  19.   fgets(nPersona.nombre, MAX_CHARS, stdin);
  20.   p = strchr(nPersona.nombre, '\n');
  21.   if (p != NULL)
  22.      *p = '\0';
  23.  
  24.   puts("Apellido:");
  25.   fgets(nPersona.apellido, MAX_CHARS, stdin);
  26.   p = strchr(nPersona.apellido, '\n');
  27.   if (p != NULL)
  28.      *p = '\0';
  29.  
  30.   nPersona.telefono = 123456789;
  31.  
  32.   fprintf(
  33.      stdout, "%-30s%-30s%-18ld\n",
  34.      nPersona.nombre, nPersona.apellido, nPersona.telefono
  35.   );
  36.  
  37.   return EXIT_SUCCESS;
  38. }

Un saludo


Título: Re: Ayuda con fprintf
Publicado por: Luchoz95 en 20 Abril 2013, 07:01 am
Sos un genio !, Muchas gracias.
 S2!