Hola gente tengo un problema , va mas que un problema una consulta , vean esta linea de código ...
fprintf(miarchivo,"%s%s%d",nPersona.nombre,nPersona.apellido,nPersona.telefono);
esto va a escribir en un archivo de la siguiente manera ...
CitarNombre
Apellido
156XXXX
bueno yo lo que quiero es que se escriba asi ...
CitarNombre Apellido 156XXXX
con algún tipo de tabulacion o algo por el estilo , algún consejo ? S2!
Pues usa la secuencia de escape de la tabulacion que es \t en tu cadena de formato del frintf().
Cita de: Luchoz95 en 19 Abril 2013, 19:08 PMyo 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:
fprintf(
miarchivo, "%-Xs%-Ys%-Zd",
nPersona.nombre,
nPersona.apellido,
nPersona.telefono
);
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
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)
sigo con el mismo problema , se hace un salto de linea aunque le agrege esto ..
fprintf(miarchivo,"%-50s%-50s%-50d",nPersona.nombre,nPersona.apellido,nPersona.telefono);
no se que ondaa :S
Cita de: Luchoz95 en 19 Abril 2013, 22:01 PMsigo con el mismo problema , se hace un salto de linea aunque le agrege esto ..
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í:
#include <string.h>
/* ... */
char *p;
/* ... */
p = strchr(nPersona.nombre, '\n');
if (p != NULL)
*p = '\0';
p = strchr(nPersona.apellido, '\n');
if (p != NULL)
*p = '\0';
fprintf(
miarchivo, "%-50s%-50s%-50d",
nPersona.nombre, nPersona.apellido, nPersona.telefono
);
Un saludo
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 ...
fgets(nPersona.nombre,50,stdin);
ahora estoy usando scanf para leer los nombres y apellidos , pero no le tengo muchas confianza , algun consejo ? S2!
Cita de: Luchoz95 en 20 Abril 2013, 03:35 AMeh 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).
Cita de: Luchoz95 en 20 Abril 2013, 03:35 AMpero ya encontre el error , ahora tengo que solucionarlo ... el error esta en esta linea ...
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:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_CHARS 256
struct reg {
char nombre[MAX_CHARS];
char apellido[MAX_CHARS];
long telefono;
};
int main(void)
{
struct reg nPersona;
char *p;
puts("Nombre:");
fgets(nPersona.nombre, MAX_CHARS, stdin);
p = strchr(nPersona.nombre, '\n');
if (p != NULL)
*p = '\0';
puts("Apellido:");
fgets(nPersona.apellido, MAX_CHARS, stdin);
p = strchr(nPersona.apellido, '\n');
if (p != NULL)
*p = '\0';
nPersona.telefono = 123456789;
fprintf(
stdout, "%-30s%-30s%-18ld\n",
nPersona.nombre, nPersona.apellido, nPersona.telefono
);
return EXIT_SUCCESS;
}
Un saludo
Sos un genio !, Muchas gracias.
S2!