[ayuda] Arreglos dentro de estructuras ("no arreglo de estructurar")

Iniciado por Thena_a, 4 Diciembre 2016, 17:23 PM

0 Miembros y 1 Visitante están viendo este tema.

Thena_a

necesito inicializar los primeros 9 datos de un arreglo que se encuentra dentro de una estructura pero no se como  :-( tengo algo asi



#include<stdio.h>
#include<math.h>


typedef struct{
int hogares;
float ingresosA[];
float ingresosB[];
float promedioA[];
float promedioB[];
float desviacionA[];
float desviacionB[];
float varianzaA[];
float varianzaB[];


}año;

int main(void){
int i,opcion,opcion2;
año doce,catorce;

doce.ingresosA={895,789,8745,258,4897}; /*aqui es donde me da el error expected expression before '{' token*/




aprecio la ayuda,  gracias

engel lex

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

#include <stdio.h>

int main(void) {
typedef struct{
int a;
int b;
int c;
}alfa;

alfa algo = {1,2,3};
printf("%i, %i\n", algo.b, algo.c);
return 0;
}
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MAFUS

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

#include<stdio.h>

typedef struct{
int hogares;
float ingresosA[5];
float ingresosB[5];
float promedioA[5];
float promedioB[5];
float desviacionA[5];
float desviacionB[5];
float varianzaA[5];
float varianzaB[5];
} anno;

int main(void) {
   anno doce = {.ingresosA = {895, 789, 8745, 258, 4897}};

    /********************************************************************************
    Una definición posterior podría ser escrita así:

    doce = (anno) {.ingresosA = {895, 789, 8745, 258, 4897}};

    pero sigue sirviendo para una inicialización de la estructura completa.
    para inicializar un bloque posterior se debe hacer valor por valor.
    *********************************************************************************/
   
   for(int i = 0; i < 5; ++i)
       printf("%.0f\n", doce.ingresosA[i]);
}