2014-12-11 4 views
-1

В настоящее время я реализую алгоритм банкиров в Linux C для класса. Я привык к C++, и у меня возникают проблемы с некоторым синтаксисом в C. Я создал класс Job, затем функцию, которая принимает класс задания и присваивает им случайные числа от 1 до 10.Проблема с синтаксисом C

#include <sys/wait.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <sys/wait.h> 

struct job 
{ 
    int requestA; 
    int requestB; 
    int requestC; 
    int requestD; 
    int requestE; 
    int needA; 
    int needB; 
    int needC; 
    int needD; 
    int needE; 
} 

void process_rec(job *job1) 
{ 
    int a_initial = 1 + (rand() % 10); 
    int b_initial = 1 + (rand() % 10); 
    int c_initial = 1 + (rand() % 10); 
    int d_initial = 1 + (rand() % 10); 
    int e_initial = 1 + (rand() % 10); 

    int a_final = a_initial + (rand() %10); 
    int b_final = b_initial + (rand() %10); 
    int c_final = c_initial + (rand() %10); 
    int d_final = d_initial + (rand() %10); 
    int e_final = e_initial + (rand() %10); 

    job1.requestA = a_initial; 
    job1.requestB = b_initial; 
    job1.requestC = c_initial; 
    job1.requestD = d_initial; 
    job1.requestE = e_initial; 

    job1.needA = a_final; 
    job1.needB = b_final; 
    job1.needC = c_final; 
    job1.needD = d_final; 
    job1.needE = e_final; 


} 
int main() 
{ 

return 0; 
} 

Я получаю сообщение об ошибке «Запрос члена„RequestA“в чем-то не структуры или объединения. Может кто-то помочь мне о том, что случилось с моим кодом? Кроме того, как бы я создать одну из моих структур в моя главная функция?

+0

где находится вызов process_rec() функцию? –

ответ

2

в вашем случае

job *job1; 

job1 является указателем. использовать оператор ->.

Далее jobне a primitive data type.

Либо вы должны использовать struct job,

или, лучше, изменить

struct job 
{ 
    int requestA; 
    int requestB; 
    int requestC; 
    int requestD; 
    int requestE; 
    int needA; 
    int needB; 
    int needC; 
    int needD; 
    int needE; 
} 

в

typedef struct job 
{ 
    int requestA; 
    int requestB; 
    int requestC; 
    int requestD; 
    int requestE; 
    int needA; 
    int needB; 
    int needC; 
    int needD; 
    int needE; 
} job; 

и вы можете использовать job, как вы использовали в своем коде. Однако в обоих случаях вам понадобится ; после определения структуры.

Примечание: всегда необходимо проверить на наличие NULL перед разыменованием указателя, принятого в качестве параметра. Кроме того, я предполагаю, что вы находитесь в процессе обновления main(). :-)

+0

Я пробовал это, и я все равно получаю то же сообщение об ошибке – user1781500

+0

@ user1781500 см. Обновленный ответ. –

0

Проверьте приведенный ниже код. Чтобы получить доступ к члену структуры, вам необходимо использовать оператор ->. Мы не видим, что вы вызываете свою функцию, и это нужно сделать, как показано в коде. Если вы просто хотите использовать job вместо struct job вы можете сделать ЬурейеЕ struct job job;

struct job 
{ 
    int requestA; 
    int requestB; 
    int requestC; 
    int requestD; 
    int requestE; 
    int needA; 
    int needB; 
    int needC; 
    int needD; 
    int needE; 
}; 

void process_rec(struct job *job1) 
{ 
    int a_initial = 1 + (rand() % 10); 
    int b_initial = 1 + (rand() % 10); 
    int c_initial = 1 + (rand() % 10); 
    int d_initial = 1 + (rand() % 10); 
    int e_initial = 1 + (rand() % 10); 

    int a_final = a_initial + (rand() %10); 
    int b_final = b_initial + (rand() %10); 
    int c_final = c_initial + (rand() %10); 
    int d_final = d_initial + (rand() %10); 
    int e_final = e_initial + (rand() %10); 

    job1->requestA = a_initial; 
    job1->requestB = b_initial; 
    job1->requestC = c_initial; 
    job1->requestD = d_initial; 
    job1->requestE = e_initial; 

    job1->needA = a_final; 
    job1->needB = b_final; 
    job1->needC = c_final; 
    job1->needD = d_final; 
    job1->needE = e_final; 


} 
int main() 
{ 
    struct job job; 
    process_rec(&job); 
    return 0; 
} 
Смежные вопросы