• Inicio
  • Buscar
  • Ingresar
  • Registrarse

    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • C / C++ »
    • ejercicio punteros y estructuras
    • Imprimir
    Páginas: [1]   Ir Abajo

    Autor Tema: ejercicio punteros y estructuras  (Leído 1584 veces)

    Desconectado CoZarmo

    • { L0 } Ñuub
    • Mensajes: 3
      • Ver Perfil
    ejercicio punteros y estructuras
    « en: Septiembre 14, 2018, 11:03:08 pm »
    Buenas tardes, veran
    tengo que hacer el siguiente programa:
    "Escribir un programa que pregunte por el nombre (nombre y apellido paterno) de un estudiante y que busque en un archivo estudiantes.in e imprima en la pantalla toda su informacion. Nota: Cada informacion del estudiante esta separada unicamente por el caracter *".
    Ya tengo este codigo:
    #include <stdio.h>
    #include <stdlib.h>
      #define NET 2
      #define MAX 16
      #define MAXNOM 50

    typedef char Tstring[MAX];

      typedef struct
      {
      char camp1[MAX];
      }Tname;

      typedef struct
      {
         Tname name;
         Tstring camp2;
         Tstring camp3;
         Tstring camp4;
      }Tetiqueta;

      struct Tdata
      {
      int Netiqueta;
      Tetiqueta tabla [MAX];
      };

      void main()
      {
         FILE      *fe;
         struct Tdata data;
         char k;
         int i,n;

         fe = fopen("estudiantes.in", "r");
         if (fe == NULL)
         {
       printf("\nError abriendo fichero\n");
       return;
         }

         n=0;
         while( (n<NET) && (!feof(fe)) )
         {
       fscanf(fe, "%[^\n]\n", data.tabla[n].name.camp1);
       fscanf(fe, "%[^\n]\n", data.tabla[n].camp2);
            fscanf(fe, "%[^\n]\n", data.tabla[n].camp3);
       fscanf(fe, "%[^\n]\n", data.tabla[n].camp4);
            fscanf(fe,"*\n");
       n++;
         }

         printf("Dame el nombre del estudiante: ");
         scanf("%s",&k);

        for(i=0; i<NET; i++)
        {
          if(k==data.tabla.name.camp1)
           {
             printf("%s\n", data.tabla.name.camp1);
             printf("%s\n", data.tabla.camp2);
             printf("%s\n", data.tabla.camp3);
             printf("%s\n", data.tabla.camp4);
           }
        }

         fclose(fe);
         return;
      }
    pero me aparece el un error en       if(k==data.tabla.name.camp1)
    si me pueden ayudar, se los agradecere mucho
    En línea

    Desconectado Villano

    • { L2 } Nativo Digital
    • **
    • Mensajes: 126
      • Ver Perfil
    Re:ejercicio punteros y estructuras
    « Respuesta #1 en: Septiembre 17, 2018, 01:05:37 pm »
    ¿Y que error te tira el compilador?. Es importante.
    En línea

    Desconectado dbbeltran

    • { L0 } Ñuub
    • Mensajes: 4
      • Ver Perfil
    Re:ejercicio punteros y estructuras
    « Respuesta #2 en: Septiembre 20, 2018, 07:30:14 am »
    Hola buenas ,

    hay varios problemas en tu código y que claramente te llevan al error en en  " if(k==data.tabla.name.camp1) ".

    Lo primero es que debe aprender a indentar, comentar el código y definir las variables con un nombre que represente el uso de ella ( no solo por una letra ) . Siempre es bueno que esté ordenado para que sea entendible para otras personas y para uno mismo.

    En cuanto al error, se produce por que está tratando de comparar un solo caracter con una cadena de caracteres (palabra), y esto ocurre debido a que  la variable "k" esta definida  como caracter y no como una cadena de caracteres "char k;", esto quiere decir que
    cuando se pregunta por el nombre del alumno en "scanf("%s",&k);" esto solo guardará el primer caracter del nombre y no el nombre completo, eso en resumen es el error.

    Entonces, para solucionar hay que empezar por guardar bien el nombre del alumno en un arreglo de caracteres algo como "char k[20];" , pero también hay que tener en cuenta que para comparar arreglos de caracteres no es igual que comparar un solo caracter, por ejemplo si tienes una variable "char a" y "char b" para compararlas lo haces "if ( a == b)", pero, si estos fueran arreglos (o cadenas de caracteres) "char arreglo1[20]" y  "char arreglo2[20]" no podrías hacer "if (arreglo1 == arreglo2)", eso sería un error, lo que habría que hacer es incluir la librería "string.h" y hacer uso de sus funciones que operan sobre arreglo de caracteres http://c.conclase.net/librerias/index.php?ansilib=string#inicio en este sitio puede ver cuales son las funciones disponibles y algunos ejemplos, las que te puede ayudar son:
    strcpy (arreglo1, arreglo 2) // copia arreglo1 en arreglo2.
    strcmp (arreglo1, arreglo2) // compara arreglo1 con arreglo2.
    strlen(arreglo) // te calcula el largo del arreglo.
    etc..

    Si necesita otra función puede buscarla dentro del sitio o en otro, hay mucho material en internet sobre manejo de arreglos o cadenas de caracteres.

    Espero que se entienda lo que traté de explicar, pero tiene que empezar por eso.

    Saludos  ;)

    En línea

    • Imprimir
    Páginas: [1]   Ir Arriba
    • Hack x Crack - Comunidad de Seguridad informática »
    • Programación »
    • C / C++ »
    • ejercicio punteros y estructuras
     

    • SMF | SMF © 2013, Simple Machines
    • XHTML
    • RSS
    • WAP2
    Va un mudo y le dice a un sordo: Hack x Crack usa cookies. Pues eso... Learn more