Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Thena_a en 4 Diciembre 2016, 17:23 pm



Título: [ayuda] Arreglos dentro de estructuras ("no arreglo de estructurar")
Publicado por: Thena_a en 4 Diciembre 2016, 17:23 pm
necesito inicializar los primeros 9 datos de un arreglo que se encuentra dentro de una estructura pero no se como  :-( tengo algo asi


Código
  1. #include<stdio.h>
  2. #include<math.h>
  3.  
  4.  
  5. typedef struct{
  6. int hogares;
  7. float ingresosA[];
  8. float ingresosB[];
  9. float promedioA[];
  10. float promedioB[];
  11. float desviacionA[];
  12. float desviacionB[];
  13. float varianzaA[];
  14. float varianzaB[];
  15.  
  16.  
  17. }año;
  18.  
  19. int main(void){
  20. int i,opcion,opcion2;
  21. año doce,catorce;
  22.  
  23. doce.ingresosA={895,789,8745,258,4897}; /*aqui es donde me da el error expected expression before '{' token*/
  24.  
  25.  


aprecio la ayuda,  gracias


Título: Re: [ayuda] Arreglos dentro de estructuras ("no arreglo de estructurar")
Publicado por: engel lex en 4 Diciembre 2016, 17:39 pm
primero... no debes usar "ñ" en la programación, ya que es un caracter no ascii standard y te puede generar mil problemas...

otra cosa, recuerda que en C y C++ los arreglos se manejan a bajo nivel y no puedes esperar que un arreglo se redimensione solo a medida que insertes valores...

en este caso esos array por no tener valores originalmente, tendrán un tamaño 0, tienes que primero redimensionar el float dentro del sctruct antes de insertar cualquier valor

normalmente lo que la gente hace es que los predefine con los valores maximos y listo

si fuera un struct sin arrays, si pudieras inicializar (solo incializar) como quieres, ejemplo

Código
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4. typedef struct{
  5. int a;
  6. int b;
  7. int c;
  8. }alfa;
  9.  
  10. alfa algo = {1,2,3};
  11. printf("%i, %i\n", algo.b, algo.c);
  12. return 0;
  13. }
  14.  


Título: Re: [ayuda] Arreglos dentro de estructuras ("no arreglo de estructurar")
Publicado por: MAFUS en 4 Diciembre 2016, 20:25 pm
Existe una posibilidad, pero solo te sirve para cuándo das los datos a los arrays durante la definición. En caso contrario deberás darlo uno a uno.
Estándar C >= C99
Código
  1. #include<stdio.h>
  2.  
  3. typedef struct{
  4. int hogares;
  5. float ingresosA[5];
  6. float ingresosB[5];
  7. float promedioA[5];
  8. float promedioB[5];
  9. float desviacionA[5];
  10. float desviacionB[5];
  11. float varianzaA[5];
  12. float varianzaB[5];
  13. } anno;
  14.  
  15. int main(void) {
  16.    anno doce = {.ingresosA = {895, 789, 8745, 258, 4897}};
  17.  
  18.    /********************************************************************************
  19.     Una definición posterior podría ser escrita así:
  20.  
  21.     doce = (anno) {.ingresosA = {895, 789, 8745, 258, 4897}};
  22.  
  23.     pero sigue sirviendo para una inicialización de la estructura completa.
  24.     para inicializar un bloque posterior se debe hacer valor por valor.
  25.     *********************************************************************************/
  26.  
  27.    for(int i = 0; i < 5; ++i)
  28.        printf("%.0f\n", doce.ingresosA[i]);
  29. }