2017-01-09 10 views
0

私は、動的なサイズの配列を作成せずに単純なデータベースを作りたいと思います。私はネストされた構造が私を助けることができると思ったが、これまでのところそれは痛みではない。これは私のアイデアだった私が始めたとき:ネストされた構造のサイズを設定するには?

#include <stdio.h> 
#define MAXDOG 50 
#define MAXCHAR 20 

    struct allDog { 
     int size; 
     struct oneDog[MAXDOG] { 
      char dogName[MAXCHAR]; 
      char OwnerName[MAXCHAR]; 
     }; 
    }; 

私は私の問題は、構造体oneDog後に[MAXDOG]一部であることをかなり確信して、私は内部構造に何とか静的サイズを与えることができますか?

あなたは私が下記やろう試験の一部を読むことができます:

プログラムがデータをプリントアウト後、犬の&所有者の名前(MAX 50)を要求します。あなたは物事を過度に複雑だ...

答えて

4

を動的配列を使用することはできません - これを試してみてください。

#define MAXDOG 50 
#define MAXCHAR 20 

typedef struct {  // struct which defines one dog 
    char dogName[MAXCHAR]; 
    char ownerName[MAXCHAR]; 
} Dog; 

typedef struct {  // struct which contains array of dogs 
    int size;   // no of dogs in array currently 
    Dog dogs[MAXDOGS]; // array of up to MAXDOGS dogs 
} Dogs; 
+1

注:あなたはあまりにも複雑すぎます。 typedefを導入することによって。 – wildplasser

+1

私は個人的にtypedefの構文がより好きです。認識される複雑さにもかかわらず、私にはより読みやすいです。私は通常、より読みやすい(しかしよりしばしばより冗長な)コードに賛成する。 – mgarey

+0

@wildplasser:これはC言語ではなくC言語であり、 'typedef'は一般的にコードが進化するにつれて役立ちがちです。 –

3

あなたがタイプではないメンバーをサイズの、構文は次のとおりです。

struct allDog { // type 
     int size; 
     struct oneDog { // type 
      char dogName[MAXCHAR]; 
      char OwnerName[MAXCHAR]; 
     } dogs[MAXDOG]; // member 
    }; 

テイク他のメンバーとの一貫性を保つために、と書かれている必要があります。タイプは一般に、メンバーとタイプの間で区別するために、AllDogOneDogと入力します。

+0

助けてくれてありがとう、これも同様に動作します。私はより一貫しています! – 2b1c

関連する問題