Hola bueno pongo todo el programa:
#include "stdio.h"
#include "conio.h"
#include "string.h"
typedef struct {
char nombre[50];
char capital[50];
}paises;
int i=0,indicador=1;
paises nombres[100],pais;
char buff[30];
void ingresardatos(paises *nombres);
void mostrardatos(void);
void modificardatos(paises *nombre);
void escribirdatos(paises *nombre);
char menu(void);
main()
{
while(indicador){
switch(menu()){
case 'A': ingresardatos(nombres);
break;
case 'B': mostrardatos();
break;
case 'C': modificardatos(nombres);
break;
case 'D': return 0;
indicador=0;
break;
}
}
}
void ingresardatos(paises *nombres)
{
FILE *pt;
if((pt=fopen("DATOS","rb+"))==NULL)
{
printf("Error al leer archivo de datos\n");
return;
}
printf("Ingrese los datos:<<ENTER>> en el campo pais para terminar\n");
printf("Ingrese el país: ");
while(*gets(nombres
.nombre))
{
printf("Ingrese su capital:");
gets(nombres.capital);
i++;
printf("Ingrese el país: ");
}
fwrite(nombres,sizeof(paises),i,pt);
rewind(pt);
}
void mostrardatos(void)
{
FILE *pt;
if((pt=fopen("DATOS","rb+"))==NULL)
{
printf("Error al leer archivo de datos\n");
return;
}
fread(&pais,sizeof(paises),1,pt);
while(!feof(pt))
{
printf("%-30s%-30s\n",pais.nombre,pais.capital);
fread(&pais,sizeof(paises),1,pt);
}
fclose(pt);
}
void modificardatos(paises *nombre)
{
FILE *pt;
int j;
if((pt=fopen("DATOS","rb+"))==NULL)
{
printf("Error al leer archivo de datos\n");
return;
}
rewind(pt);
printf("Ingrese el nombre del pais a modificar\n");
for(j=0;;j++)
{
gets(buff);
fread(&pais,sizeof(paises),1,pt);
if(strcmp(pais.nombre,buff)==0);
{
printf("Ingrese el nuevo nombre: ");
gets(nombres[j].nombre);
printf("Ingrese la nueva capital: ");
gets(nombres[j].capital);
escribirdatos(nombres);
break;
}
}
}
void escribirdatos(paises *nombre)
{
FILE *pt;
if((pt=fopen("DATOS","rb+"))==NULL)
{
printf("Error al leer archivo de datos\n");
return;
}
fwrite(nombres,sizeof(paises),i,pt);
rewind(pt);
}
char menu(void)
{
char c;
printf("Ingrese la opcion que desea realizar\n");
printf("A) Ingresar Paises\n");
printf("B) Listar Paises\n");
printf("C) Modificar paises\n");
printf("D) Salir\n");
scanf("%c",&c);
while(getchar()!='\n');
return c;
}
Es un programa para guardar datos de paises y sus capitales, y poderlos modificar despúes guardandolo en un archivo.
Los problemas son varios, primero que cuando mando a escribir datos en el archivo se mantiene basura, de archvios anteriores, es decir no sobrescribe la estructura, con los datos nuevos que ingrese.
Luego otro problema es que al hacer modificaciones void escribirdatos(), no lo hace, no entiendo porque.
Si es que me pueden ayudar estaria muy agradecido.
Saludos.