在二维数组中,保留了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;
}
答案 0 :(得分:1)
您似乎错误地接受了输入。
scanf("%s", &worker[i]);
worker
是 int 类型的2D数组。因此,您需要在获取输入时使用另一个索引。 int 的格式说明符也是%d
。任何体面的编译器都应该在编译期间给你警告。
答案 1 :(得分: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);
}
然后同样询问项目的名称。然后得到小时数,然后计算最大值,然后释放动态分配的工人&amp;项目字符串(和两个指针数组)。