具有二维数组的C程序?

时间:2013-05-10 21:50:07

标签: c

在二维数组中,保留了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;   
}

2 个答案:

答案 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;项目字符串(和两个指针数组)。