0

これは宿題の問題です。多くの人の名、姓、および年齢のユーザー入力を受け取る C プログラムがあります。現在、それは機能し、名前をコンソールに正しく出力していますが、正しい年齢を出力しておらず、何が間違っているのかわかりません。これが私のコードです:

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

int main()
{
    int choice;
    int i = 0;
    int x,k,l;
    fputs("How many people would you like to add? ", stdout);
    scanf(" %d", &choice);
    fflush(stdout);

    int ch;
    while((ch = getchar()) != EOF && ch != '\n');
    if (ch == EOF) 
    {
    }

    char firstName[choice][20];
    char lastName[choice][20];
    int age[choice][3];

    char first[20];
    char last[20];
    int a[3];

    for (x = 0; x < choice; x++) 
    {
        for (l = 0; l < 3; l++)
        {
            age[x][l] = 0;
            a[l] = 0;
        }
    }


    while(i < choice)
    {
      printf("Enter the first name of person ");
      printf(" %d", i);
      printf(": ");
      fgets(first, 20, stdin); 

      for (k = 0; k < 20; k++)
      { 
        firstName[i][k] = first[k];
      }
      i++;
    } 

    i = 0;
    while(i < choice)
    {
      printf("Enter the last name of person ");
      printf(" %d", i);
      printf(": ");
      fgets(last, 20, stdin);     

      for (k = 0; k < 20; k++)
      { 
          lastName[i][k] = last[k];
      }
      i++;
    } 

    i = 0;

    while(i < choice)
    {
      fputs("Enter the age of person ", stdout);
      printf(" %d", i);
      printf(": ");
      scanf(" %d", &a);
      fflush(stdout);

      for (l = 0; l < 3; l++)
      { 
          age[i][l] = a[l];
      }
      i++;
    }

    int sh;
    while((sh = getchar()) != EOF && sh != '\n');
    if (sh == EOF) 
    {
    }

    for (x = 0; x < choice; x++) 
    {
      printf("First name ");
      printf(": ");
      printf("%s ", firstName[x]);
      printf("\n");
      printf("Last name ");
      printf(": ");
      printf("%s ", lastName[x]);
      printf("\n");
      printf("Age ");
      printf(": ");
      printf("%d ", &age[x]);
      printf("\n");
    }
    return 0;
}

このコードをコピーして貼り付けると実行されますが、出力される年齢は正しくありません。これがなぜなのか誰か教えてもらえますか?ありがとうございました!

4

1 に答える 1

2

scanf(" %d", &a);

それは次のようになります。

scanf(" %d", &a[0]);

そして、あるprintfべきですprintf("%d", age[x][0]);

配列全体ではなく、配列の最初の要素を読み込みたい。配列のアドレスではなく、配列の最初の要素を出力したい。

より良い解決策は、おそらくage3 の配列をまったく作成しないことです。一人一人の年齢は 1 つだけです。変更は次のとおりです。

int age[choice];

int a;

scanf(" %d", &a);

age[choice] = a;

printf("%d ", age[x]);
于 2013-04-29T23:17:19.827 に答える