具有二维数组的C程序?

具有二维数组的C程序?,c,C,在一个二维数组中,保留了N个工人和M个项目的工作时间,工人的名字保存在一个名为工人的数组中,项目的名字保存在一个名为项目的数组中。编写一个程序,读取数据并显示工作时间更长的工人。所以我尝试了这个方法,但每次运行它时,这似乎是一个逻辑错误,因为它说:给出项目的编号,如果我键入2,这也是根据我的程序的工人数量,然后它要求每个工人的小时数 #include<stdio.h> #include<conio.h> int main() { int i, j, n, wor

在一个二维数组中,保留了N个工人和M个项目的工作时间,工人的名字保存在一个名为工人的数组中,项目的名字保存在一个名为项目的数组中。编写一个程序,读取数据并显示工作时间更长的工人。所以我尝试了这个方法,但每次运行它时,这似乎是一个逻辑错误,因为它说:给出项目的编号,如果我键入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;   
}

你的输入似乎有误

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

worker是int类型的2D数组。因此,在获取输入时需要有另一个索引。int的格式说明符也是%d。任何一个优秀的编译器都应该在编译过程中向您发出警告。

在我看来,您必须首先询问有多少工人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);
}

然后,同样地,询问项目的名称。然后获取小时数,然后计算最大值,然后释放动态分配的worker&project字符串和两个指针数组。

问题是?解决我的家庭作业?不要对我无礼。我在这方面做了很多工作……我每天工作c3小时,有时我不明白发生了什么……我不是故意无礼,但看起来你已经找到答案了。这里回答的人也有自己的生活,可能不想浪费时间回答其他地方已经回答过的问题。他们都回答错了……我想他打算把“worker”作为一个字符串数组,包含每个工人的名字。@jarmod我也这么想。但在数小时内,OP也有一个2D阵列。