[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