-3

2 次元配列では、N 人の労働者と M 人のプロジェクトの労働時間が保持され、労働者の名前は Worker という名前の配列に保持され、プロジェクトの名前は "Project" という名前の配列に保持されます。データを読み取り、労働時間の多い労働者を表示するプログラム。だから私はこれを試しましたが、実行するたびに論理エラーのようです。 "これは私のプログラムによるワーカーの数でもあり、各ワーカーの時間を尋ねます..

#include<stdio.h>
#include<conio.h>

int main()
{
    int i, j, n, worker[100][10], hours[30][100];

    printf("The number of the project: ");
    scanf("%d", &n);

    for (i=0; i<n; i++)
    {
        printf("Give the worker %d: ", i+1);
        scanf("%s", &worker[i]);
    }

    for (i=0; i<n; i++)
    {
        printf("\n The worker  %s\n", worker[i]);
        for (j=0; j<30; j++)
        {
            printf("The number of the hours for the day %d: ", j+1);
            scanf("%d", &hours[i][j]);
        }
    }

    for (i=0; i<n; i++)
    {
        for (j=0; j<30; j++)
            if (hours[i][j]==0)
                break;
        if (j==30)
            printf("%s\n", worker[i]);
    }

    getch();
    return 0;   
}
4

2 に答える 2

1

入力を間違っているようです。

scanf("%s", &worker[i]);

workerint型の 2D 配列です。そのため、入力を取得するときに別のインデックスが必要です。また、 intの書式指定子は%d. 適切なコンパイラーであれば、コンパイル中に警告が表示されるはずです。

于 2013-05-10T21:53:10.343 に答える
0

最初に、次のようなワーカー数 (N) とプロジェクト数 (M) を尋ねる必要があるようです。

int ii, m, n;
char **worker;
char **project;

printf("How many workers? ");
scanf("%d", &n);

printf("How many projects? ");
scanf("%d", &m);

次に、ワーカーの名前を尋ねます。

// Allocate space for n worker string pointers
worker = (char **)malloc(n * sizeof(char *));

for (ii = 0; ii < n; ++ii)
{
  char bufname[1024]; // danger here if input too long
  printf("Name of worker[%d]? ", ii + 1);
  scanf("%s", bufname);
  worker[ii] = strdup(bufname);
}

次に、同様にプロジェクトの名前を尋ねます。次に、時間を取得し、最大値を計算してから、動的に割り当てられたワーカーとプロジェクトの文字列 (および 2 つのポインターの配列) を解放します。

于 2013-05-10T22:15:07.500 に答える