Ver Mensaje Individual
  #4 (permalink)  
Antiguo 06/05/2006, 05:19
mml87
 
Fecha de Ingreso: mayo-2006
Mensajes: 11
Antigüedad: 18 años, 8 meses
Puntos: 0
Bueno, he vuelto con más dudas ^^U
Primero de todo, otra función:
He hecho una función para guardar los polinomios en archivos, pero hay una cosa que no se poner, pongo la función:

int guarda(p_node p)
{FILE *in;
char nombre;
p_node aux1=p->seg;
if(aux1!=NULL)
{printf("Di el nombre del archivo donde guardarlo");
scanf("%c",&nombre);
in=fopen("%c",&nombre, "w");
if(in==NULL) return 1;
while(aux1!=NULL)
{fprintf(in, "%d %f.\n",&aux1->exp,&aux1->coef);
aux1=aux1->seg;
}
fclose(in);
return 0;
}
}

La duda en cuestion es:
al compilar pone que hay demasiados argumentos en "fopen". Pues bien, ¿¿como lo hago para, en vez de escribir el nombre del archivo, me lea el que se puso anteriormente (con el scanf)??
Si lo quiero guardar en binario: ¿solo he de ponerr "wb" en vez de "w"??
Una vez se crea el archivo y eso, ¿donde se guarda?
__________________________________________________ _______________

La otra duda es respecto a la funcion anterior (la del post de arriba).
Ya la modifique y compila, pero no me abre archivos, por lo que creo que lo que está mal es la "llamada" a la función que hago en el "main". La pongo:

printf("\nEscrive el nombre del archivo.\n");
scanf("%c",&nombre);
system("pause");
printf("\nEscrive A o B en funcion del polinomio al que quieras asignar los valores del archivo.\n");
fflush(stdin);
if(op=='A' || op=='a')
{A=inicializa();
lee_de_texto(nombre,A);
limpia(A);
}

La opcion B es igual y no la pongo y el mensaje de error por si pone otra letra tampoco (porque no tiene que ver). Como ya puse arriba, la función "inicializa" la he probado en otras funciones y funciona. Con "limpia" pasa lo mismo.
No veo el error o_O
Por si acaso pongo aquí la función corregida:


int lee_de_texto(char *nombre, p_nodo l)
{FILE *in;
p_node p;
char ex[5],coe[20];
in=fopen(nombre,"r");
if(!in) return(-1);
inicializa(l);
while(!feof(in))
{fscanf(in,"%s %s",ex,coe);
p=crea_nodo(1,1);
p->exp=atoi(ex);
p->coef=aof(coe);
p->seg=l->seg;
l->seg=p;
fclose(in);
return(0);
}
if(!p)
{inicializa(l);
fclose(in);
return(1);
}


Gracias por la ayuda y siento poner dudas tan tontas ^^U pero es que acabo de empezar con esto y me lio ^^U

P.D: ¿En el de leer ficheros, el binario es igual pero con "rb" no?

P.P.D: Si hay algun nombre que no cuadra con los declarados, ese no es el fallo, lo que pasa es que el programa me obligan a hacerlo en catalan, y aqui lo he traducido y se me puede haber escapado alguna palabra ^^U

Última edición por mml87; 06/05/2006 a las 05:21 Razón: se me olvido añadir una cosa