2

このプログラムでは、person という構造体と、person 型として宣言された配列の未使用領域に要素を挿入するための挿入関数を定義したいと思います。最後に、結果を標準出力として出力したいと思います。誰かが間違っていることを修正するためのヒントを教えてもらえますか? 乾杯

エラー:

arrays.c:16:22: error: expected ')' before '[' token
arrays.c: In function 'main':
arrays.c:34:5: warning: implicit declaration of function 'insert'
arrays.c:41:5: warning: format '%s' expects type 'char *', but argument 2 has type 'char **'

コード

#include <stdio.h>

/* these arrays are just used to give the parameters to 'insert',
   to create the 'people' array */
char *names[7]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim",
          "Harriet"};
int ages[7]= {22, 24, 106, 6, 18, 32, 24};


/* declare your struct for a person here */
typedef struct{
  char name;
  int ages; 
}  person;

static void insert (p[], char *name, int ages) {

  static int nextfreeplace = 0;
  /* put name and age into the next free place in the array parameter here */
  person p[0] = {&name, age};

  /* modify nextfreeplace here */
  nextfreeplace++;

}

int main(int argc, char **argv) {

  /* declare the people array here */
   person p[7];

   //insert the members and age into the unusage array. 
  for (int i=0; i < 7; i++) {
    insert (p[i], &names[i], ages[i]);
    p[i]= p[i+1];

  }

  /* print the people array here*/
  for (int i=0; i < 7; i++) {
    printf("%s is %d years old\n", &names[i], ages[i]);
  }

  return 0;
}
4

2 に答える 2

3

最初の問題は構造体の人です。名前はchar* (ポインタ)またはchar[] (配列)である必要がありますが、charとして宣言しています。

typedef struct 
{
    char *name; //or char name[100];
    int age;
}
person;

次に、挿入 関数の引数が正しくありません。人の配列は必要ありません (それを行うこともできますが、これはより簡単です) 。編集できるように人の構造体へのポインターが必要です。

static void insert(person *p, char *name, int age)
{
    p->name = name;
    p->age = age;
}

最後に、配列にデータを入力して出力する方法は次のとおりです。

int main()
{
    //names and ages...

    person people[7];

    for (int i = 0; i < 7; i++)
    {
        insert(&people[i], names[i], ages[i]);
    }

    for (int i = 0; i < 7; i++)
    {
        printf("name: %s, age: %i\n", people[i].name, people[i].age);
    }
}

例: http://ideone.com/dzGWId .

于 2012-10-20T15:44:26.123 に答える