• Sábado 21 de Diciembre de 2024, 17:27

Autor Tema:  Problemas Al Leer Cadenas, Con Scanf  (Leído 2641 veces)

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Problemas Al Leer Cadenas, Con Scanf
« en: Viernes 13 de Mayo de 2005, 21:29 »
0
Hola, buenas, vereis, tengo un problema, a la hora de mostrar el contenido de un fichero en consola. La cosa es la siguiente. Yo tengo q mostrar en pantalla, las personas q hay en un fichero de clientes de coches. Pues bien, lo hago asi:
Código: Text
  1.  
  2. void verPropietarios()
  3. {
  4.   FILE *pf;
  5.   struct propietario p1;
  6.   pf = fopen("propietarios.txt", "r"); /*se abre para lectura*/
  7.  
  8.   if(pf == NULL)
  9.   {
  10.     printf("\n No existe el archivo\n");
  11.     exit (-1);
  12.   }
  13.  
  14.   /*comienzo a leer datos hasta que llegue al final*/
  15.  
  16.   while(fscanf(pf, "%s %s %s %s", p1.nombre, p1.apellidos, p1.NIF, p1.direccion) == 4)
  17.   {
  18.      escribirPropietario(p1);
  19.   }
  20.   fclose(pf);
  21. }
  22.  
  23.  

El problema está q cuando me los muestra, me coge para el nombre una palbra, no dos. Es decir, si le meto:
Nombre: Maria Jose
Apellidos: Perez Muñoz
Me troca los campos, y me muestra
Nombre:Maria Apellidos:Jose NIF: Perez.
Entendeis lo que quiero decir no, yo se q esto pasa por leer los campos con scanf, pero es q no se como leerlos, ya q se trata de ficheros texto, si alguien puede decirme como puedo solucionar este problema. Gracias

Código: Text
  1.  
  2. void escribirPropietario(struct propietario p1)
  3. {
  4.   printf("Nombre: %s  Apellidos: %s NIF: %s  Direccion: %s\n", p1.nombre, p1.apellidos, p1.NIF, p1.direccion);
  5. }
  6.  
  7.  

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Problemas Al Leer Cadenas, Con Scanf
« Respuesta #1 en: Sábado 14 de Mayo de 2005, 13:17 »
0
La mejor manera de leer y escribir grupos constantes de datos es mediante estructuras:
Código: Text
  1.  
  2. typedef struct
  3. {
  4. char nombre[100];
  5. char apellido[100];
  6. char NIF[12];
  7. char direccion[256];
  8. }t_datos;
  9.  
  10. void main()
  11. {
  12. t_datos dato;
  13. FILE *pf;
  14.  
  15. pf=fopen("archivo","w+");
  16.  
  17. //para escribir
  18. fwrite(pf,sizeof(t_datos),1,&dato);
  19. //para leer
  20. fread(pf,sizeof(t_datos),1,&dato);
  21.  
  22.  
Yo que tu usaba este método mejor, ya verás como los problemas se terminan.
Un saludo.  :lightsabre:
No hay tonto más molesto que el ingenioso.

iori2029

  • Miembro activo
  • **
  • Mensajes: 48
    • Ver Perfil
Re: Problemas Al Leer Cadenas, Con Scanf
« Respuesta #2 en: Sábado 14 de Mayo de 2005, 21:49 »
0
Ya probaste con fgets.

fgets te permite leer cadenas con espacios, creo que su uso es mas o menos asi

fgets(fichero,cadena para guardar texto, numero de caracteres a guardar);

Mas o menos, creo que va asi con esos argumentos,ahora como dice el cuate de arriba, para estructuras es mejor usar fread y fwrite, ademas te sirven para escribirlos de modo binario, no solo texto.

Espero que te sirva adios :)

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Problemas Al Leer Cadenas, Con Scanf
« Respuesta #3 en: Lunes 16 de Mayo de 2005, 18:12 »
0
Cita de: "iori2029"
Ya probaste con fgets.

fgets te permite leer cadenas con espacios, creo que su uso es mas o menos asi

fgets(fichero,cadena para guardar texto, numero de caracteres a guardar);

Mas o menos, creo que va asi con esos argumentos,ahora como dice el cuate de arriba, para estructuras es mejor usar fread y fwrite, ademas te sirven para escribirlos de modo binario, no solo texto.

Espero que te sirva adios :)
Gracia por responder lo primero, pero una pregunta, se trata de un fichero texto, se puede usar la funcion fgets, para un fichero texto, como quedaria, quiero decir, entonces la linea del fscanf, tengo q sustituirla por una de fgets,.
Gracias

iori2029

  • Miembro activo
  • **
  • Mensajes: 48
    • Ver Perfil
Re: Problemas Al Leer Cadenas, Con Scanf
« Respuesta #4 en: Miércoles 18 de Mayo de 2005, 17:27 »
0
Perdon por la tardanza, fgets es similar a gets, es decir ambas son funciones para cadenas de caracteres(texto), y si , puedes usar fgets en lugar de fscanf, nada mas que creo que fgets interpreta los datos como una cadena(creo), ademas tienes que pasarle el numero de caracteres que quieres que te lea, el archivo y creo que el buffer do :devil: nde se va a guardar la cadena.

i82maria

  • Miembro MUY activo
  • ***
  • Mensajes: 119
    • Ver Perfil
Re: Problemas Al Leer Cadenas, Con Scanf
« Respuesta #5 en: Miércoles 18 de Mayo de 2005, 19:51 »
0
Cita de: "iori2029"
Perdon por la tardanza, fgets es similar a gets, es decir ambas son funciones para cadenas de caracteres(texto), y si , puedes usar fgets en lugar de fscanf, nada mas que creo que fgets interpreta los datos como una cadena(creo), ademas tienes que pasarle el numero de caracteres que quieres que te lea, el archivo y creo que el buffer do :devil: nde se va a guardar la cadena.
Gracias por responder, pero insisto, se trata de un fichero tipo texto, y yo no se cual es el tamaño del buffer, se necesita leer linea a linea, el fichero.
Para q no se amontonen las palabras y se metan en el campo diferente.
De todos modos gracias por tu ayuda.

kinita

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: Problemas Al Leer Cadenas, Con Scanf
« Respuesta #6 en: Sábado 21 de Mayo de 2005, 07:05 »
0
HOLA, MUCHAS GRACIAS, ME ES DE GRAN AYUDA.