Programación General > C/C++
Problema con Archivos
pablo_666:
Hola de nuevo, he descubierto el error, está en la linea 44, fui un poco descuidado y hice un copiar pegar mal hecho ya que debo cambiar el tipo de dato que imprime el printf:
debe ser asi:
printf("%-10d%-13s%5fn",cuenta,Nombre,Balance);
y no como estaba antes que era asi:
printf("%-10s%-13s%sn",cuenta,Nombre,Balance);
Ahora me resta resolver que me lea bien el tipo float ya que no me lo lee bien alguna idea
gracias a todos!
m0skit0:
Supongo que te referirás a Balance. Ten en cuenta que lo que lees de un fichero de texto son todo cadenas de caracteres, por tanto no tiene sentido usar directamente %f en printf() porque no es un float, es un char *. Deberías convertir primero la cadena de texto que representa un float a un verdadero float con atof(). Fíjate en el ejemplo que viene en el anterior enlace.
pablo_666:
Hola m0skit0
Te cuento que estuve buscando y la funcion fscanf() devuelve un entero cuando le pasas los parametros, asi que por ejemplo cuando el lee la primera linea del archivo de texto que es 1 pablo 2300.00 el me toma el primer dato como entero y no necesito trasnformarlo con la funcion atoi ya que por ejemplo hice pruebas le sume 2 o 3 al primer valor o sea al 1 y efectivamente me lo suma, lo raro es q esa suma tambien afecta al 2300.00 y me pone 2302 no lo entiendo bien ademas me muestra una serie de numeros por lo que no es capaz de entender que es un float, como si no fuera capaz de leer un tipo de dato flotante, no se si toca hacer casting algo, ademas en el libro de Deitel lo pone asi entonces no entiendo que es lo que pasa exactamente, que dices alguna sugerencia saludos
m0skit0:
Disculpa, no había visto el fscanf() <_<
¿Qué tal si haces un printf() justo después del fscanf() para ver qué lee realmente?
pablo_666:
Hola m0skit0
Primero que todo he cambiado los datos que contiene el archivo por estos mira:
12 lui 23.00
18 kiko 98.00
13 pepe 45.00
11 lulu 67.00
78 poli 51.00
Tambien cambie el codigo te lo adjunto para que le eches un ojo
--- Código: C --- #include<stdio.h>#include<conio.h>#include<string.h>int main(){ int cuenta,opc,a=0,f; char archivo[]="Clientes.txt"; char Nombre[30]; float Balance; FILE *cfptr; while(a!=1){ printf("nnESCRIBIR EN UN ARCHIVO Y LEER"); printf("n........1.Escribir............."); printf("n........2.Leer................."); printf("n........3.Salir................"); printf("nEscoja la opcion "); scanf("%d",&opc); switch(opc){ case 1:printf("nnCrear Archivo"); if((cfptr=fopen(archivo,"w"))==NULL) printf("nEl archivo no se pudo abrir"); else{ printf("nEntre la Cuenta,Nombre y Blance:n"); printf("nEntre EOF para finalzar el archivo"); printf("nDato:"); fflush(stdin); scanf("%d%s%f",&cuenta,Nombre,&Balance); while(!feof(stdin)){ fprintf(cfptr,"%d %s %.2fn",cuenta,Nombre,Balance); printf("nDato:"); fflush(stdin); scanf("%d%s%f",&cuenta,Nombre,&Balance); } getch(); fclose(cfptr); } break; case 2:printf("nnLeer Archivo"); if((cfptr=fopen(archivo,"r"))==NULL) printf("nEl archivo no se pudo abrir"); else{ printf("n%-10s%-13s%sn","Cuenta","Nombre","Balance"); while(!feof(cfptr)){ //printf("%-10d%-13s%5.2fn",cuenta,Nombre,Balance); // printf("n%d",cuenta); // printf("n%s",Nombre); // printf("n%f",Balance); fscanf(cfptr,"%d%s%.2f",&cuenta,Nombre,&Balance); printf("ndatoCuenta:%d",cuenta); printf("ndatoNombre:%s",Nombre); printf("ndatoBalance:%f",Balance); } getch(); fclose(cfptr); } break; case 3:printf("nGracias por utilizar este programa"); getch(); a=1; break; default:printf("nCometio un error, presione tecla para continuar"); getch(); break; } } return 0;}
Ademas hice lo que me dijiste de poner un printf inmediantamente despues de fscanf() y los resultados que me entrega son estos:
Cuenta Nombre Balance
datoC:12
datoN:lui
datoB:-107374176.000000
datoC:23
datoN:.00
datoB:-107374176.000000
datoC:18
datoN:kiko
datoB:-107374176.000000
datoC:98
datoN:.00
datoB:-107374176.000000
datoC:13
datoN:pepe
datoB:-107374176.000000
datoC:45
datoN:.00
datoB:-107374176.000000
datoC:11
datoN:lulu
datoB:-107374176.000000
datoC:67
datoN:.00
Que me dices saludos!!
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa