2013-05-10 3 views
-3

в двухмерном массиве сохраняются рабочие часы для N рабочих и проектов M, имена рабочих хранятся в массиве с именем Worker и именем проектов в массиве с именем «Project». Напишите программу, которая считывает данные и отображает рабочего с большим количеством рабочих часов. Поэтому я пробовал это, но каждый раз, когда я его запускал, это кажется логической ошибкой, потому что в нем говорится: укажите номер проекта, а если я напечатаю «2» это также число работников в соответствии с моей программой, а затем просит часов для каждого работника ..C программа с двухмерными массивами?

#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; 
} 
+1

И вопрос в том, что? –

+6

Решите мою домашнюю работу? – jpw

+0

Не грубите со мной. Я очень много работал над этим ... Я работаю на C 3 часа каждый день, а иногда я не понимаю, что происходит. –

ответ

1

Вы, кажется, принимает входные данные неправильно.

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

worker является 2D массив типа INT. Таким образом, вам нужно иметь другой индекс при вводе. Также спецификатором формата для int является %d. Любой достойный компилятор должен был дать вам предупреждения во время компиляции.

+0

Думаю, он намеревается «рабочий» быть массивом строк, содержащих имена каждого из рабочих. – jarmod

+0

@jarmod Я тоже думал то же самое. Но для «часов» OP также имеет 2D-массив. – Mahesh

0

Кажется мне, что вы должны сначала спросить, сколько рабочих (N) и сколько проектов (М) с чем-то вроде:

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); 
} 

Тогда попросите названия проектов, аналогично. Затем получите часы, затем вычислите max, затем освободите динамически выделенные рабочие строки & (и два массива указателей).

Смежные вопросы