cual es el error en este codigo fuente??

Iniciado por fedemaxrul, 11 Abril 2017, 17:28 PM

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

fedemaxrul

la idea es un programa con un array de 9 estructuras, cada una con un puntero a un prefijo metrico y una variable de tipo entero, cuyo valor es el exponente correspondiente para ese prefijo metrico.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 9
typedef struct
{
   char*prefijo;
   int exponente;
}prefijos[N]={"femto",-15,"pico",-12,"nano",-9,"micro",-6,"mili",-3,"kilo",3,"mega",6,"giga",9,"tera",12};
int main()
{
   int i;
   for(i=0;i<N;i++)
   {
       printf("%s * %d\n",prefijos[i].prefijo,prefijos[i].exponente);
   }
   return 0;
}



· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

engel lex

el char no está siendo declarado estaticamente (durante la creación de la variable) sino dinamicamente, así que el char no puede ser solo *, tienes que alojarle un espacio en memoria
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

Vale, confundes dos cosas: La definición de tipos con typedef y la definición de un array de structs en la misma declaración.

Tu has escrito:
typedef struct { ... }

Esto después de la última llave espera un identificador para un tipo de dato. Sin embargo dices:
} prefijos[N]=...

Con eso lo que quieres es definir una variable array de structs. Esta construcción no puede ir junta.

En tu caso lo que debes hacer es quitar la palabra clave typedef y dejar

struct { ... } prefijos[N]=...

Con esto tendrás un array de N estructuras anónimas (no podrás usar ese tipo en ningún otro sitio del programa para crear más datos).

Pero aún así tienes otro problema:
Cuando inicializas el array haces: prefijos[N]={ ... }.

Esto está bien para un array de elementos simples, pero estás inicializando estructuras de dos elementos, así que deberías hacerlo así:

prefijos[N]={ {elem1, elem2}, {elem1, elem2}, ... , {elem1, elem2} };

En conjunto la nueva definición es esta:
struct {
    char* prefijo;
    int exponente;
} prefijos[N] = {{"femto",  -15},
                 {"pico",   -12},
                 {"nano",   -9},
                 {"micro",  -6},
                 {"mili",   -3},
                 {"kilo",   3},
                 {"mega",   6},
                 {"giga",   9},
                 {"tera",   12}};