-3

在一个二维数组中保存了 N 个工人和 M 个项目的工作时间,工人的名字保存在一个名为 Worker 的数组中,项目的名称保存在一个名为“Project”的数组中。写一个读取数据并显示工人工作时间更长的程序。所以我尝试了这个,但每次我运行它,这似乎是一个逻辑错误,因为它说:给出项目的编号,如果我输入“2 “这也是根据我的程序的工人数量,然后它要求每个工人的小时数..

#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]);

worker是一个int类型的二维数组。因此,您在接受输入时需要有另一个索引。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);
}

然后类似地询问项目的名称。然后获取小时数,然后计算最大值,然后释放动态分配的工作人员和项目字符串(以及两个指针数组)。

于 2013-05-10T22:15:07.500 回答