2012-01-31 17 views
6

Necesito ayuda con la programación C. Tengo la siguiente situación:Pasando matriz de struct con typedef a una función

struct Product { 
    int code; 
    char *name; 
    char *spec; 
    int quantity; 
    float price; 
}; 

typedef struct Product products[8]; 
products product = { 
    {100, "Mouse", "Ottico", 10, 8.30}, 
    {101, "Tastiera", "Wireless", 6, 15.50}, 
    {102, "Monitor", "LCD", 3, 150.25}, 
    {103, "Webcam", "USB", 12, 12.00}, 
    {104, "Stampante", "A Inchiostro", 6, 100.00}, 
    {105, "Scanner", "Alta Risoluzione", 9, 70.50}, 
    {106, "Router", "300 Mbps", 10, 80.30}, 
    {107, "Lettore Mp3", "10 GB", 16, 100.00} 
    }; 

Ignore el uso del idioma italiano anterior.

Me gustaría pasar la matriz de estructuras llamada "producto" a una función. Por ejemplo, si quería hacer algo como

product[1].name = "Computer" 

Pero dentro de una función, ¿cómo se supone que debo hacerlo? Me gustaría saber cómo llamar a esa función desde main() y cómo escribir el prototipo en mi archivo de cabecera.

Gracias de antemano por cualquier ayuda.

EDITAR

le estoy dando a este programa de prueba. Este no funciona y ni siquiera hay llamadas para funcionar en general. Simplemente no compila.

#include <stdio.h> 
#include <stdlib.h> 

void test(Card *card); 

int main() 
{ 
    struct Card { 
     char *type; 
     char *name; 
    }; 

    typedef struct Card cards[2]; 
    cards card = {{"Hi", "Hi"}, {"Foo", "Foo"}}; 
    return 0; 
} 

void test(Card *card) { 
    printf("%s", card[1].type); 
} 

Respuesta

6

aquí:

void foo(struct Product *bla) 
{ 
    bla[1].name = "Computer"; 
} 

o utilizar el tipo de alias

void foo(products bla) 
{ 
    bla[1].name = "Computer"; 
} 

continuación, llamar a la función como esta:

foo(product); 
+0

Hola he editado la publicación principal, ¿puedes verificar qué está mal en mi sintaxis? – wiredmark

+0

@MarcelloSilvestri en 'prueba de vacío (Tarjeta *)': no hay ningún tipo llamado 'Tarjeta' en su programa. Hay un tipo llamado 'struct Card' y un tipo llamado' cards' pero no 'Card'. – ouah

2

Puesto que usted tiene el typedef (que falta una palabra clave struct en su ejemplo, por cierto), que sólo puede utilizar ese tipo en el prototipo de la función:

void func(products p); 

Una función que realiza la operación específica que preguntaste podría ser:

void func(products p) 
{ 
    p[1].name = "Computer"; 
} 

se le puede llamar gustaría:

func(product); 

Desde cualquier lugar donde product esté dentro del alcance.

+0

Hola, gracias por su respuesta. Me sale el siguiente error: error: expected ')' before 'p' En mi prototipo. – wiredmark

+0

¿Se declararon 'productos' antes de ese prototipo? La definición de tipo debe estar en su lugar para que ese prototipo tenga sentido. –

0
typedef struct tag_Product { 
    int code; 
    char *name; 
    char *spec; 
    int quantity; 
    float price; 
} PRODUCT; 

PRODUCT products[8] = { 
    {100, "Mouse", "Ottico", 10, 8.30}, 
    {101, "Tastiera", "Wireless", 6, 15.50}, 
    {102, "Monitor", "LCD", 3, 150.25}, 
    {103, "Webcam", "USB", 12, 12.00}, 
    {104, "Stampante", "A Inchiostro", 6, 100.00}, 
    {105, "Scanner", "Alta Risoluzione", 9, 70.50}, 
    {106, "Router", "300 Mbps", 10, 80.30}, 
    {107, "Lettore Mp3", "10 GB", 16, 100.00} 
    }; 

void MyFunction(PRODUCT *pProduct) 
{ 
    pProduct->code = 0; // sample 
} 

void main() 
{ 
    MyFunction(&products[2]); // sample 
} 
Cuestiones relacionadas