C/Visual C - Ayuda con lectura de archivo secuencial

 
Vista:

Ayuda con lectura de archivo secuencial

Publicado por eduardo (82 intervenciones) el 18/02/2010 23:25:03
Buenas tardes, Tengo con el siguiente código creo el archivo .DAT:
/* Crear un archivo secuencial */
#include <stdio.h>
#include <stdlib.h>

/* la función main() comienza la ejecución del programa */
int main( void )
{
int cuenta; /* número de cuenta */
char nombre[80]; /* nombre de cuenta */
double saldo; /* saldo de la cuenta */

FILE *ptrCf; /* apuntador a clientes.dat */

if ( (ptrCf = fopen( "clientes.dat", "w" )) == NULL )
printf( " El archivo no pudo abrirse\n" );
else {
printf( "\n\t INGRESO DE DATOS ( EOF para finalizar \n\t ================\n\n" );

printf( " Numero de cuenta : " );
scanf( "%d", &cuenta );

printf( " Nombre del titular: " );
fflush( stdin );
gets( nombre );

printf( " Saldo de la cuenta: " );
scanf( "%lf", &saldo );

/* mientras no sea fin de archivo */
while ( !feof( stdin ) ) {
fprintf( ptrCf, "%08d %30s %10.2f\n", cuenta, nombre, saldo );

printf( "\n Numero de cuenta : " );
scanf( "%d", &cuenta );

printf( " Nombre del titular: " );
fflush( stdin ); /* limpiar el flujo asociado a la entrada estándar */
gets( nombre );

printf( " Saldo de la cuenta: " );
scanf( "%lf", &saldo );
}
fclose( ptrCf ); /* floclose cierra el archivo */
}

return 0; /* indicar terminación exitosa */

} /* fin de main() */

Y con el siguiente code, leo el archivo .DAT. y lo muestro por pantalla
/* Lectura e impresión de un archivo secuencial */
#include <stdio.h>
#include <stdlib.h>

/* la función main() comienza la ejecución del programa */
int main( void )
{
int cuenta; /* número de cuenta */
char nombre[30]; /* nombre de cuenta */
double saldo; /* saldo de la cuenta */

FILE *ptrCf; /* apuntador a clientes.dat */

if ( (ptrCf = fopen( "clientes.dat", "r" )) == NULL )
printf( " El archivo no pudo abrirse\n" );
else {
printf( "\n\t\t SALIDA DE DATOS\n\t\t ===============\n\n\n" );

printf( " %8s %-20s %10s\n ------------------------------------------------\n", "Cuenta", "Nombre", "Saldo" );

fscanf( ptrCf, "%d%s%lf", &cuenta, nombre, &saldo );

/* mientras no sea fin de archivo */
while ( !feof( ptrCf ) ) {
printf( " %08d %-20s %10.2f\n", cuenta, nombre, saldo );
fscanf( ptrCf, "%d%s%lf", &cuenta, nombre, &saldo );
}
fclose( ptrCf ); /* floclose cierra el archivo */
}

getchar(); /* pausa */
return 0; /* indicar terminación exitosa */

} /* fin de main() */

Todo va bien mientras nombre contenga una sola palabra, pero si nombre tuviera de 2 o 3 palabras(cuando intento colocar apellidos), ocurre un bucle infinito. Pienso que se debe al uso de fscanf(), dado que funciona de manera similar a scanf() y por ende da por finalizada la cadena al encontrar el caracter de espacio. En todo caso podrían ayudarme a corregir esto.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder