2013-11-09 3 views
0

Меня попросят написать функцию, которая берет два значения из типа структуры и сравнивает их. Если они равны, он хочет, чтобы я добавил два других значения из этих структур и отправил их в другую структуру. Он также должен возвращать 1 или 0 через имя функции, поэтому я определил функцию как int.C - Прохождение структур через аргументы функции

Я попытался написать программу, в которой содержится номер социального страхования сотрудника и его заработная плата, а затем ссуда и заработная плата другого сотрудника. Если социальные отношения одинаковы, они будут сочетать две зарплаты и отправлять их в другую структуру, в которой содержится общая заработная плата сотрудников.

Я получаю ошибки каждый раз, когда упоминаю функцию сравнения. Это, по-видимому, связано с аргументами функции. Как это можно сделать правильно?

#include <stdio.h> 
#include <stdlib.h> 

#define EMPLOYEE_COUNT 4 

struct ewage 
{ 
     int ssn; 
     int wage; 
} 

struct record 
{ 
     int totalwage; 
} 

int compare(struct ewage s1, struct ewage s2, struct record *r); 

int main (void) 
{ 
    struct ewage e[EMPLOYEE_COUNT]; 
    struct record r[EMPLOYEE_COUNT]; 
    int i, j; 
    for (i = 0; i < EMPLOYEE_COUNT; i ++) 
    { 
     for (j = i + 1; j < EMPLOYEE_COUNT; j ++) 
     { 
      int success = compare(e[i], e[j], &record[i]); 
      if (success == 1) 
         printf ("%d/%d | Record: %d \n", i, j, record[i]); 
      else 
         printf ("%d/%d | DOES NOT MATCH \n", i, j); 
     } 
    } 

    system ("PAUSE"); 
    return 0; 
} 

int compare(struct ewage s1, struct ewage s2, struct record *r) 
{ 
     if (s1.ssn == s2.ssn) 
     { 
        r->totalwage = s1.wage + s2.wage; 
        return 1; 
     } 
     return 0; 
} 
+0

Какие ошибки вы получаете? Ошибка компиляции, исключение времени выполнения или просто результат не то, что вы ожидаете? –

+0

Помимо ошибок, отмеченных Чарли Бернсом, я хотел бы указать, что вы объявляете только массивы структур, но никогда не устанавливаете значения для фактических структур, которые имеет массив. Конечно, это может быть связано с тем, что код не завершен, хотя ... – jpw

+0

@ C.R., Они были ошибками компиляции. Чарли Бернс идентифицировал их всех, и теперь он правильно компилируется. – River

ответ

0

Вам нужна точка с запятой после STRUCT Defintion

struct ewage 
{ 
     int ssn; 
     int wage; 
}; // here 

struct record 
{ 
     int totalwage; 
}; // here 

запись не определена, я предполагаю, что это настоящее имя является г

int success = compare(e[i], e[j], &r[i]); // here 
if (success == 1) 
    printf ("%d/%d | Record: %d \n", i, j, &r[i]); // here 

Наконец, вам нужно что-то напечатать с окончательным % d, я предполагаю, что общая заработная плата здесь:

printf ("%d/%d | Record: %d \n", i, j, r[i].totalwage); // here 

Теперь вы можете начать отлаживать его ...

+0

Большое вам спасибо! Я понятия не имел, что структуры закончились полуплодом, и я испортил запись и r, а также забыл указать переменную в структуре r. Я с облегчением вижу, что я на правильном пути! – River

0

есть несколько ошибок: 1. должен быть ';' после определения структуры 2. вы не должны передавать тип «запись» в функцию сравнения, вместо этого вы должны пройти & r [i]

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