[C con Clase] Ayuda urgente
Cristian
quichan4 en hotmail.com
Mar Sep 9 19:44:20 CEST 2008
Hola, tengo este programa, es con base a un archivo que tengo en mi computadora y se llama alumnos.txt este archivo es usado para el siguientcódigo, el problema que tengo es que cuando realiza la busqueda y el ID no se encuentra, el programa truena y se cierra, no deberia de pasar eso, ya intente agregando algunos ifs pero no funciono.
Espero que alguien me pueda ayudar
Gracias
El codigo es el siguiente, el problema realmente esta al final.
/*
* r abrir un archivo para lectura
* w crear un archivo para escritura.Si el archivo y existe,se destruye el anterior
* a agrega. abrir o crear un archivo para escribir al final
* r+ abre un archivo para actualizar(leer y escribir)
* w+ crea un archivo para actualizar.Si el archivo ya existe, se descarta el contenido anterior
* a+ agregar. abrir o crear un archivo para actualizar, la escritura se efectuara al final de archivo
*/
#include <stdio.h>
#include <string.h>
#include<iostream.h>
struct registro
{
int id;
char nombre[30];
float c1;
float c2;
float c3;
float prom;
};
main()
{
struct registro datos[20];
int dato;
float f1,f2,f3;
int d1;
char name[20];
int i,j,c;
int encontrado=0;
FILE *apuntFile;
char archivo[15];
printf("nombre del archivo -> ");
scanf("%s",archivo);
if((apuntFile=fopen(archivo,"r"))==NULL)
printf("no se encontro el archivo en esa ruta\n");
else
{
c=0;
while(!feof(apuntFile))
{
fscanf(apuntFile,"%d %s %f %f %f",&d1,&name,&f1,&f2,&f3);
// printf("%d %s %f %f %f",d1,name,f1,f2,f3);
datos[c].id=d1;
strcpy(datos[c].nombre,name);
datos[c].c1=f1;
datos[c].c2=f2;
datos[c].c3=f3;
datos[c].prom=(f1+f2+f3)/(float)3;
c++;
}
}
printf("El archivo almacenado ya en la estructura \n");
printf(" ID \t NOMBRE \t 1er.EX \t2o.EX \t 3er.EX \t PROM\n");
printf("\n");
for(i=0;i<c-1;i++)
{
printf("%d \t",datos[i].id);
printf("%s ",datos[i].nombre);
if(strlen(datos[i].nombre)<=6)
printf("\t\t");
else
printf("\t");
printf(" %0.1f \t\t%0.1f \t %0.1f \t\t%0.1f\n",datos[i].c1,datos[i].c2,datos[i].c3,datos[i].prom);
}
printf("Que ID buscas? ");
scanf("%d",&dato);
i=0;
while(datos[i].nombre!=NULL)
{
if(datos[i].id==dato)
{
printf("%d\t",datos[i].id);
printf("%s\t",datos[i].nombre);
printf("%f\n",datos[i].prom);
encontrado=1;
getchar(); getchar();
}
i++;
}//end while
if (encontrado==0)
printf("No se encontró esa matrícula\n");
getchar();
}
Más información sobre la lista de distribución Cconclase