Duda en C

Enanoasesino

Tengo k hacer este programa : Realizar un programa que utilizando las constantes de MAXIMO y MINIMO descuento (0,97 y 0,95 respectivamente), recoja los precios de un fichero "Clientes.dat" y los escriba en otro fichero llamado "Facturas.dat" aplicando el descuento.

y el rollo es k nose komo hacer para poner las operaciones
el codigo k tengo yo es este
#include <stdio.h>
#define MAX 0.97
#define MIN 0.95
void main()
{
int datos;
double total;
double contenido;
FILE *fichero;
fichero=fopen("clientes.dat","r+");
if(fichero==NULL)
{
printf("El archivo no puede abrirse");
}
total=0;
datos=fscanf(fichero,"%lf",&contenido);
if(fclose(fichero)!=0)
{
printf("Error al cerrar el archivo\n");
}
}
y nose ande meter las operaciones haber si me podeis ayudar

pd:sry xo es que me ha dixo un amigo que lo postee x el irc y es lo que he copiado...

D

eso de data=fscanf??.... raro

yo lo que haria seria un for que vaya leyendo cada precio del archivo, lo multiplique por el descuento, y lo guarde en el otro archivo. Para eso tendiras que saber el numero de precios que hay en el archivo original.

ReMaTxEs

Así a bote pronto te falta la libreria para trabajar con archivos creo... xD Hace un año que no toco C xD

gF

#3 Para trabajar con ficheros es suficiente con stdio.h

#1 Si clientes.dat es solo para lectura abrelo asi:

fichero=fopen("clientes.dat","r"); (sin +)

Ademas tienes que crear otro fichero:

fichero2=fopen("facturas.dat","w");

Aparte de eso, para poder decirte como se hace, tienes que especificar cual es la estructura del archivo "clientes.dat" para saber como hay que leerlo...

Leunamal

estoy con #4

Pero te falta algo importante, usas fscanf una sola vez. Eso implica que solo lees la primera linea. Por ello debes meter el fscanf dentro de un bucle while o for.

Yo usaría un while para meterle como condición de que se ha leído todo el fichero hasta EOF (fin del fichero). Creo que EOF te lo puede reconocer como una constante, o puedes usar feof(fichero). Creo recordar que esa era la función, si no es así, habrá alguna función muy parecida.

Saludos

[EDITADO]

Otra cosa que arreglaría es lo siguiente:

fichero=fopen("clientes.dat","r+");
if(fichero==NULL)
{
printf("El archivo no puede abrirse");
}

eso en verdad esta mal. Ya que despues de usar la comprobación sigues usando el programa e intentas leer en el fichero (suponiendo que no existe).

Puedes hacer do cosas: que si el fichero no existe, cerrar el programa o seguir ejecutando el programa siempre y cuando le pongas el modo w+(Crea un nuevo fichero para actualizarlo (lectura y escritura) si existe, lo sobreescribe).

/OPCION A/
if(fichero=fopen("clientes.dat","w+")==NULL){
puts("El fichero no puede abrirse"); /Imprime por pantalla la linea con un salto de línea./
exit(1); /Para salir del programa./
}

/OPCION B/
if(fichero=fopen("clientes.dat","w+")==NULL){
puts("El fichero no puede abrirse"); /Imprime por pantalla la linea con un salto de línea./
}

Enanoasesino

muchas gracias, espero que a mi colega le sirva :)

Usuarios habituales