7

I need help with C programming. I have the following situation:

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}
    };

Please disregard the use of Italian language above.

I would like to pass the array of structs named "product" to a function. For example, if I wanted to do something like

product[1].name = "Computer"

But inside of a function, how am I supposed to do it? I would like to know how to call that function from the main() and how to write the prototype in my header file.

Thanks in advance for any help.

EDIT

I'm giving you this test program. This one ain't working and there is not even call to function in the main. It just doesn't compile.

#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);
}
wiredmark
  • 1,098
  • 6
  • 26
  • 44

3 Answers3

7

Here:

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

or using your type alias

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

then call the function like this:

foo(product); 
ouah
  • 142,963
  • 15
  • 272
  • 331
  • Hi have edited the main post, can you check what is wrong in my syntax? – wiredmark Feb 01 '12 at 11:20
  • @MarcelloSilvestri in `void test(Card *card)`: there is no type named `Card` in your program. There is a type named `struct Card` and a type named `cards` but no `Card`. – ouah Feb 01 '12 at 11:44
2

Since you have the typedef (which is missing a struct keyword in your example, by the way), you can just use that type in the function prototype:

void func(products p);

A function performing the specific operation you asked about might be:

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

You can call it like:

func(product);

From anywhere where product is in scope.

Carl Norum
  • 219,201
  • 40
  • 422
  • 469
  • Hi, thanks for your answer. I get the following error: error: expected ')' before 'p' In my prototype. – wiredmark Jan 31 '12 at 18:07
  • Is `products` declared before that prototype? The type definition needs to be in place for that prototype to make sense. – Carl Norum Jan 31 '12 at 19:12
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
}
BitBank
  • 8,500
  • 3
  • 28
  • 46