Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/05/2014, 23:06
TriN
 
Fecha de Ingreso: enero-2014
Mensajes: 47
Antigüedad: 10 años, 10 meses
Puntos: 0
Error de buffer al usar scanf

Buenos dias comunidad forosweb, hoy vengo por aqui debido a que tengo un problema en una funcion de un programa de registros que estoy elaborando, busque bastante información sin embargo no he conseguido solución, el problema que tengo es el siguiente, en la funcion agregar registros de mi programa de registros, tengo declarada una variable que guardara el numero de registro, hasta aqui todo bien el problema reside si se coloca alguna letra o una cadena de caracteres el programa se bugea y se queda como en un ciclo infinito en vez de imprimir el mensaje de error, he buscando diversas formas de arreglar este error sin embargo no he conseguido solución dejo el codigo esperando sus buenos consejos saludos y gracias de antemano

Código C:
Ver original
  1. int agregar(void)
  2. {
  3. FILE *arc;
  4. int r,temp,i=0;
  5. arc=fopen("lista.dat","ab");
  6.     if(arc==NULL)
  7.     {
  8.        
  9.     puts("Error");
  10.     return 1;
  11.        
  12.     }  
  13.     else
  14.     {
  15.  
  16.     puts("Numero del PC que desea agregar");
  17.     scanf("%d",&temp);
  18.    
  19.            
  20.    
  21.                 if( (temp<1) || (temp>100))
  22.                 {
  23.                 puts("Numero de registro no valido");
  24.                 getch();
  25.                 system("cls");
  26.                 fclose(arc);
  27.                 return 1;
  28.                 }
  29.        
  30.        
  31.     fseek(arc,0,SEEK_END);
  32.     if(ftell(arc)!=0)
  33.     {
  34.         fclose(arc);
  35.         arc=fopen("lista.dat","rb");
  36.             if(arc==NULL)
  37.             {
  38.             puts("Error");
  39.             getch();
  40.             return 1;
  41.             }
  42.    
  43.         fread(&dat,sizeof(datos),1,arc);
  44.         while(!feof(arc))
  45.         {
  46.                 if(dat.n==temp)
  47.                 {
  48.                 puts("No  se pueden repetir los elementos del registro");
  49.                 getch();
  50.                 fclose(arc);
  51.                 return 1;
  52.                 }
  53.             fread(&dat,sizeof(datos),1,arc);
  54.         }
  55.    
  56.     }
  57.         fclose(arc);
  58.            
  59.     arc=fopen("lista.dat","ab");
  60.     if(arc==NULL)
  61.     {
  62.     puts("Error al abrir fichero");
  63.     exit(1);
  64.     }  
  65.  
  66.     dat.n=temp;
  67.    
  68.     puts("Marca ");
  69.     scanf("%s",&dat.marca);
  70.         puts("Modelo");
  71.     scanf("%s",&dat.modelo);
  72.         puts("Serial del case");
  73.     scanf("%s",&dat.cas);
  74.         puts("Serial del procesador");
  75.     scanf("%s",&dat.proc);
  76.         puts("Serial del monitor");
  77.     scanf("%s",&dat.mon);
  78.         puts("Serial del teclado");
  79.     scanf("%s",&dat.tecl);
  80.         puts("Serial del mouse");
  81.     scanf("%s",&dat.mou);
  82.         puts("Serial del camara");
  83.     scanf("%s",&dat.cam);
  84.         puts("Serial del regleta");
  85.     scanf("%s",&dat.reg);
  86.         puts("Serial de las cornetas");
  87.     scanf("%s",&dat.cor);
  88.         printf("Esta seguro de agregar esta PC al registro?");
  89.         puts("1.- SI    2.-NO");
  90.         scanf("%d",&r);
  91.             if(r==1)
  92.             {
  93.             fwrite(&dat,sizeof(datos),1,arc);
  94.             }
  95.            
  96.     }
  97.    
  98.     fclose(arc);
  99.     return 1;
  100. }