elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda principiante! :(
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda principiante! :(  (Leído 1,747 veces)
Makum

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda principiante! :(
« en: 13 Junio 2010, 18:50 pm »

estoy con un proyecto en el que me juego el año y se me da realmente mal...
tengo que crear ficheros con datos, crear una ruta, que la crea pero a la hora de comparar si el codigo de la ruta existe o no...no funciona. En fin, lo dejo aqui:
agradezco de antemano cualquier ayuda  :-*

la estructura es la siguiente:

struct rutas
 {
   int codruta;
   char cadorigen[20];
   char caddestino[20];
   float distancia;
};
  typedef struct rutas trut;

y la funcion: no se como ponerlo y ya estoy quemadisima...


void datos_ruta ()   
{
    int cod;
    int condicion=0;
    trut rutas;
    FILE *pfich;
   
  printf ("Introduzca el codigo de la ruta:");
  scanf ("%d",&cod);
  pfich=fopen("c:\\rutas.dat","ab+");
      if (pfich == NULL)
      {
        printf ("Se ha producido un error. Imposible abrir el fichero.");
        exit(1);
      }
      else
      {
          fread(&rutas,sizeof(trut),1,pfich);
          while (condicion == 0)
          {
             if (cod == rutas.codruta)
             {
               
                printf ("El código introducido ya existe.");                                       
           
                printf ("Por favor, introduzca un código diferente:");
                scanf ("%d",&cod);
                fseek(pfich,0,0);
                condicion=0;
           
             }
             else
             {
               
                 printf ("INTRODUZCA:\n\n");
                 printf ("*Origen del viaje:");
                 scanf ("%s",&rutas.cadorigen);
                 printf ("*Destino del viaje:");
                 scanf ("%s",&rutas.caddestino);
                 printf ("*Distancia a recorrer:");
                 scanf ("%f",&rutas.distancia);
                 condicion=1;   
             }
             
             system ("cls");
             printf ("*La ruta ha sido creada correctamente*");
             
             getch ();
          } 
           fwrite (&rutas, sizeof(trut),1,pfich);
         }
  fclose(pfich);
}


En línea

Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: Ayuda principiante! :(
« Respuesta #1 en: 14 Junio 2010, 10:33 am »

Una cosa , el fichero rutas.dat solo contiene un registro? por que solo lees el primero de todos , por consiguiente aunque exitan más solamente compararás el dato introducido con el primer registro , estaría bien saber la estructura del fichero antes ...


Solución posible : cargar todos lo codigos de ruta en un array , y cuando metan el código mirar si existe o no , si no , llamar a la rutina de
grabación de registros , si existe mandar el mensaje indicandolo ... espero que te sirva

Prueba los siguiente , ya verás lo bien que va

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #define NOMBRE_ARCHI "c:\\rutas.dat"
  5. #define LIMPIA_BUFFER while(getchar()!='\n')
  6.  
  7.  
  8. struct rutas {
  9.   int codruta;
  10.   char cadorigen[20];
  11.   char caddestino[20];
  12.   float distancia;
  13. };
  14.  typedef struct rutas trut;
  15.  
  16.  
  17. void writeRuta();
  18. void datos_ruta () ;
  19. void imprimeRuta();
  20. void imprimeRutas();
  21. void leer_registro();
  22. void selectOpcio();
  23.  
  24. int main(){
  25. selectOpcio();
  26. }
  27.  
  28. void selectOpcio(){
  29. int opcio = 0;
  30. while(opcio !=3){
  31. printf("\nTeclee 1 para mostrar todos los registros ");
  32. printf("\nTeclee 2 para agregar uno nuevo ");
  33. printf("\nTeclee 3 para salir ");
  34. printf("\nOpcio :");
  35. scanf("%d",&opcio);
  36. LIMPIA_BUFFER;
  37. if(opcio == 1){
  38. leer_registro();
  39. }else if(opcio == 2){
  40. datos_ruta();
  41. }else if(opcio != 3){
  42. printf("\nOpcion invalida !!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
  43. }
  44. }
  45. }
  46. int compara_cod(int cod_buscado){
  47. FILE *pfich;
  48. trut ruta;
  49.  
  50. pfich = fopen(NOMBRE_ARCHI, "ab+");
  51.  
  52. fread(&ruta,sizeof(trut),1,pfich);
  53. while(!feof(pfich)){
  54. if(cod_buscado == ruta.codruta){
  55. return 1; //encontrado
  56. }
  57. fread(&ruta,sizeof(trut),1,pfich);
  58. }
  59. fclose(pfich);
  60. return 0;
  61. }
  62.  
  63.  
  64. void leer_registro(){
  65. FILE *pfich;
  66. trut ruta;
  67. int reg_leidos = 0;
  68.  
  69. pfich = fopen(NOMBRE_ARCHI, "ab+");
  70.  
  71. fread(&ruta,sizeof(trut),1,pfich);
  72. while(!feof(pfich)){
  73. imprimeRuta(ruta);
  74. fread(&ruta,sizeof(trut),1,pfich);
  75. reg_leidos++;
  76. }
  77. printf("\n\n Numero de registros leidos =%d \n\n",reg_leidos);
  78. fclose(pfich);
  79. }
  80.  
  81.  
  82. void imprimeRutas(trut ruta[], int size){
  83. int cont = 0;
  84. for(cont ; cont < size ; cont++){
  85. imprimeRuta(ruta[cont]);
  86. }
  87. }
  88. void imprimeRuta(trut ruta){
  89. printf("\n Cod:%d Origen:%s  Destino:%s  Distancia:%f",ruta.codruta, ruta.cadorigen , ruta.caddestino, ruta.distancia);
  90. }
  91. void writeRuta(){
  92. trut rutas[2] ;
  93. FILE *fichero ;
  94. int cont = 0 ;
  95.  
  96. rutas[0].codruta = 10;
  97. strcpy(rutas[0].cadorigen , "Barcelona");
  98. strcpy(rutas[0].caddestino , "Madrid");
  99. rutas[0].distancia = 500;
  100.  
  101. rutas[1].codruta = 20;
  102. strcpy(rutas[1].cadorigen , "Murcia");
  103. strcpy(rutas[1].caddestino , "Sevilla");
  104. rutas[1].distancia = 200;
  105.  
  106. fichero = fopen(NOMBRE_ARCHI ,"ab+");
  107.  
  108. fwrite(rutas, sizeof(rutas[cont]), 2, fichero );
  109. fclose(fichero);
  110.  
  111. }
  112.  
  113.  
  114. void datos_ruta () {
  115.    int cod = 0;
  116.    int condicion=0;
  117.    trut rutas;
  118.    FILE *pfich;
  119.  
  120.  printf ("Introduzca el codigo de la ruta:");
  121.  scanf ("%d",&cod);
  122.  LIMPIA_BUFFER; // importantísimo limpiar el buffer después de leer
  123.  pfich = fopen(NOMBRE_ARCHI,"ab+");
  124.      if (pfich == NULL) {
  125.        printf ("Se ha producido un error. Imposible abrir el fichero.");
  126.        return ;
  127.      }else{
  128.          while (condicion == 0){  
  129.             if (compara_cod(cod)) {   // en este punto llamamos a la rutina que compara los códigos            
  130.                printf ("El codigo introducido ya existe.");
  131.                printf ("Por favor, introduzca un codigo diferente:");
  132.                scanf ("%d",&cod);
  133. LIMPIA_BUFFER;
  134.                //fseek(pfich,0,0);    // ya no tiene caso situarse al principio
  135.                condicion=0;          
  136.             } else  {              
  137.                 printf ("INTRODUZCA:\n\n");
  138. rutas.codruta = cod;   //te faltaba esto para que se informe el número de codigo
  139.                 printf ("*Origen del viaje:");
  140.                 scanf ("%s",&rutas.cadorigen);
  141. LIMPIA_BUFFER;
  142.                 printf ("*Destino del viaje:");
  143.                 scanf ("%s",&rutas.caddestino);
  144. LIMPIA_BUFFER;
  145.                 printf ("*Distancia a recorrer:");
  146.                 scanf ("%f",&rutas.distancia);
  147. LIMPIA_BUFFER;
  148.                 condicion=1;  
  149. fwrite (&rutas, sizeof(rutas),1,pfich);
  150. system ("cls");
  151. printf ("*La ruta ha sido creada correctamente*");    
  152.             }
  153.          }          
  154. getch ();
  155.       }
  156.  fclose(pfich);
  157. }
  158.  
  159.  
  160.  
  161.  


« Última modificación: 14 Junio 2010, 16:45 pm por Didacso » En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda en C# (Nivel Principiante) « 1 2 3 »
.NET (C#, VB.NET, ASP)
TwisteD420 22 9,631 Último mensaje 5 Junio 2012, 05:20 am
por ijorgemb
AYUDA!!!!! soy principiante, estoy haciendolo mal o es el compilador?
Programación General
julian.97 4 1,564 Último mensaje 20 Junio 2011, 03:22 am
por AckeR
Ayuda principiante C++ (matices)
Programación C/C++
Gagy 3 1,952 Último mensaje 29 Enero 2013, 17:40 pm
por Puntoinfinito
Ayuda urgente principiante
Programación C/C++
esede 1 1,121 Último mensaje 6 Marzo 2013, 22:10 pm
por esede
[PRINCIPIANTE] Ayuda con user en inyeccion SQL
Nivel Web
GingerCat 1 1,919 Último mensaje 4 Mayo 2013, 06:57 am
por Shell Root
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines