Problema subrutina en C

Colapsar
X
 
  • Hora
  • Mostrar
Borrar todo
nuevos mensajes
  • Zorak
    Rama horizontal
    Usuario regular

    • Jul
    • 96

    #1

    C/C++ Problema subrutina en C

    Hola , tengo un problema para declarar una subrutina que tenga como parámetro de entrada una estructura de datos. En el programa principal tengo definida la estructura de datos de la siguiente manera:



    struct reg{
    int a;
    float b;
    char name[50];
    };
    struct reg a[10];

    Mi duda esta en como es la sintaxis para declarar una funcion o subrutina que tenga como entrada la variable 'a', y que me permita éntrale datos por el teclado.
  • Richard R Richard
    Agujero negro
    Colaborador de La web de FísicaBloggerFolcsónomoModerador generalUsuario de confianza

    • Mar
    • 6513

    #2
    Re: Problema subrutina en C

    Puedes mirar como lo hacen en este hilo....http://forum.lawebdefisica.com/threa...ramación-en-C

    Comentario

    • Zorak
      Rama horizontal
      Usuario regular

      • Jul
      • 96

      #3
      Re: Problema subrutina en C

      Con el cuerpo de la función no tengo problema, lo que falla es a la hora de definir la funcion y poner como parámetro de entrada el tipo de dato 'a' que definí en el programa principal.Dejo un ejemplo de lo que trate de hacer:



      main(){
      struct reg{
      int a;
      float b;
      char name[50];
      };
      struct reg a[10];

      carga(a);}

      void carga(struc a)//aca es donde tengo el problema, no se como declarar la variable de entrada para la estructura de datos a definida.
      {int i;
      for(i=1,10<=i,i++){
      scanf("%f",&a.b
      [i]);
      scanf("%s",&a.name[i]);}
      }



      Última edición por Zorak; 23/11/2016, 20:19:04.

      Comentario

      • Al2000
        Agujero negro
        Usuario de confianza

        • Feb
        • 6073

        #4
        Re: Problema subrutina en C

        A ver si te sirve el video https://www.youtube.com/watch?v=bbffK7dS1ZA

        Saludos,

        Don't wrestle with a pig in the mud. You'll both get dirty, but the pig will enjoy it. - Parafraseando a George Bernard Shaw

        Comentario

        • Julián
          Nova
          BloggerUsuario de confianza

          • Feb
          • 1685

          #5
          Re: Problema subrutina en C

          Che, hay varias cosas a considerar. La primera es que nunca combiene definir una estructura en main(), principalmente para claridad de software. Lo que puedes hacer son 2 cosas. Una es definicion de la estructura como global donde no necesitas pasarla a la función solamente hacer referencia a esta y la segunda es parsarla por parámetro como hiciste con la característica que todo lo que modifiques en la estructura no podras visualizarlo fuera de la función para esto debes pasar el puntero de la estructura, que no es más que el indentificador. Pero como solo quieres visualizarla

          Código:
          [COLOR=#333333][COLOR=#333333]struct reg{[/COLOR][/COLOR]
          [COLOR=#333333][COLOR=#333333]int a;[/COLOR][/COLOR]
          [COLOR=#333333][COLOR=#333333]float b;[/COLOR][/COLOR]
          [COLOR=#333333][COLOR=#333333]char name[50];[/COLOR][/COLOR]
          [COLOR=#333333][COLOR=#333333]};[/COLOR][/COLOR]
          [COLOR=#333333][COLOR=#333333]struct reg a[10];
          
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]void carga(); 
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]
          int main() 
          { 
          
          carga();
          
          return 0; 
          }
          
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]void carga()[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]//aca es donde tengo el problema, no se como declarar la variable de entrada para la estructura de datos a definida.
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]{int i;
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]for(i=1,i<10,i++)[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]{    //si el arreglo tiene 10 elementos, el numero 10 es el caracter \n, así que va del 0 al 9[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]
          scanf("%f",a[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333][i].b);    //ves la diferencia en hacer referencia a un miembro de la estructura
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]scanf("%s",a[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333][i].nombre);[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]}
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]}[/COLOR][/COLOR]
          Así lo haría yo, ahora si quieres ser más ortodoxo

          Código:
          
          
          [COLOR=#333333][COLOR=#333333]struct reg{[/COLOR][/COLOR]
          [COLOR=#333333][COLOR=#333333]int a;[/COLOR][/COLOR]
          [COLOR=#333333][COLOR=#333333]float b;[/COLOR][/COLOR]
          [COLOR=#333333][COLOR=#333333]char name[50];[/COLOR][/COLOR]
          [COLOR=#333333][COLOR=#333333]};[/COLOR][/COLOR]
          [COLOR=#333333][COLOR=#333333]
          
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]void carga(struct reg a);  // o lo que es lo mismo [/COLOR][/COLOR][COLOR=#333333]void carga(struct reg a[]);[/COLOR][COLOR=#333333][COLOR=#333333]
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]
          int main() 
          { 
          
          [/COLOR][/COLOR][COLOR=#333333]struct reg a[10];[/COLOR][COLOR=#333333][COLOR=#333333]
          carga(a);
          
          return 0; 
          }
          
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]void carga([/COLOR][/COLOR][COLOR=#333333]struct reg a[/COLOR][COLOR=#333333][COLOR=#333333])[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]//aca es donde tengo el problema, no se como declarar la variable de entrada para la estructura de datos a definida.
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]{int i;
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]for(i=1,i<10,i++)[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]{[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]
          scanf("%f",a[i].b[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]);
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]scanf("%s",a[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333][i].nombre);[/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]}
          [/COLOR][/COLOR][COLOR=#333333][COLOR=#333333]}[/COLOR][/COLOR]
          Por más bella o elegante que sea la teoría, si los resultados no la acompañan, está mal.

          Comentario

          Contenido relacionado

          Colapsar

          Trabajando...