2016-12-08 2 views
-2

여기 내 코드입니다. C에서 구조체를 사용하는 방법을 모르겠습니다. 누군가 내가 왜이 오류를보고 있는지 확인할 수 있습니까? 나는 보통 C로 코드를 작성하지 않았고 포인터를 사용해야 할 수도 있다고 들었다.구조체 문제

#include <pthread.h> 
    #include <stdio.h> 
    #include <unistd.h> 
    #include <stdlib.h> 
    #include <errno.h> 
    #include <assert.h> 


    struct Buffer 
     { 
      int link; 
      char message[30]; 
     }buffers[3]; 

    //5 philosopher boxes and one available 
    int boxArray[6] = {0, -1, -1, -1, -1, -1}; 

    buffers[0].link = 1; 
    buffers[0].message = "empty"; 

    buffers[1].link = 2; 
    buffers[1].message = "empty"; 

    buffers[2].link = -1; 
    buffers[2].message = "empty"; 

    void sendMessage (int philNum, char newMessage) 
     { 
      int header; 

      header = boxArray[0]; 

      boxArray[0] = buffers[header].link; 

      buffers[header].message = newMessage; 

      if (boxArray[philNum] == -1) 
       { 
        boxArray[philNum] = header; 
        buffers[header].link = -1; 
       } 

      else 
      { 
       int i = boxArray[philNum]; 
       int temp; 

       do 
       { 
        temp = buffers[i].link; 

        if (temp == -1) 
        { 
         buffers[i].link = header; 
        } 

        else 
        { 
         i = buffers[i].link; 
        } 
       }while (temp = -1); 

      } 
     } 

출력. 나는 그 문제가 여기에 무엇인지 이해하지 못한다.

Message.c:17:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
    buffers[0].link = 1; 
      ^
Message.c:18:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
    buffers[0].message = "empty"; 
      ^
Message.c:20:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
    buffers[1].link = 2; 
      ^
Message.c:21:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
    buffers[1].message = "empty"; 
      ^
Message.c:23:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
    buffers[2].link = -1; 
      ^
Message.c:24:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
    buffers[2].message = "empty"; 
      ^
Message.c: In function ‘sendMessage’: 
Message.c:34:28: error: assignment to expression with array type 
    buffers[header].message = newMessage; 
+2

"나는 C에서 구조체를 사용하는 방법을 모른다". 이 기본 이슈에 대한 C 책/튜토리얼을 찾아 볼 시간이있을 때 다른 사람들에게 의존하는 것은 좋지 않습니다. – kaylum

+1

그건 크게 도움이되지 않았다. 고마워! –

+0

@kaylum 님의 댓글은 내가 올리려고 한 바로 그 것입니다. 먼저 다른 사람들이 당신이 쓴 것을 고치고 설명하도록 귀찮게하기 전에 언어를 배워야합니다. 돈을 쓰고 싶지 않다면 C 책이 무료입니다. C는 시행 착오를 통해 배울 수있는 언어가 아니며 우리는 개인 교습 사이트가 아닙니다! – Olaf

답변

1

이들은 할당있는 경우와 그

buffers[0].message = "empty"; 

및 othet 유사한 문; 당신은 글로벌 선언에 넣어하지만,이 함수 밖에 허용되지 않습니다

buffers[0].link = 1; 
buffers[0].message = "empty"; 
buffers[1].link = 2; 
buffers[1].message = "empty"; 
buffers[2].link = -1; 
buffers[2].message = "empty"; 

당신은 초기화로 교체해야합니다

struct Buffer { 
    int link; 
    char message[30]; 
}buffers[3] = { 
    {.link = 1, .message = "empty"} 
, {.link = 2, .message = "empty"} 
, {.link =-1, .message = "empty"} 
}; 

designated initializers의 C99 구문을 사용합니다.

Demo.

+0

정말 도움이 되셨습니다. 고마워요! –

-1

우선 무엇보다도 기능 밖에서 문장을 배치 할 수는 없다.

따라서 어떠한 경우에도이 문은

buffers[0].link = 1; 
buffers[0].message = "empty"; 

buffers[1].link = 2; 
buffers[1].message = "empty"; 

buffers[2].link = -1; 
buffers[2].message = "empty"; 

잘못 그리고 배열은 할당 연산자가 없습니다. 그래서 그 대신 예를 들어이

buffers[header].message = newMessage; 

쓰기

strcpy(buffers[0].message, "empty"); 
^^^^^^^ 
0

그것은 조금 도움 당신은 멤버를 구조체에 문자열을 할당하는 방법을 이해 할 수있다.

이 시도 :

#include <pthread.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <errno.h> 
#include <assert.h> 
#include <string.h> 


struct Buffer 
{ 
    int link; 
    char message[30]; 
}buffers[3] = {{1, "empty"}, {2, "empty"}, {-1, "empty"}}; 

//5 philosopher boxes and one available 
int boxArray[6] = {0, -1, -1, -1, -1, -1}; 

void sendMessage (int philNum, char newMessage) 
{ 
    int header; 

    header = boxArray[0]; 

    boxArray[0] = buffers[header].link; 

    (void) memcpy(buffers[header].message, &newMessage, sizeof(newMessage)); 

    if (boxArray[philNum] == -1) 
    { 
     boxArray[philNum] = header; 
     buffers[header].link = -1; 
    } 
    else 
    { 
     int i = boxArray[philNum]; 
     int temp; 

     do 
     { 
      temp = buffers[i].link; 

      if (temp == -1) 
      { 
       buffers[i].link = header; 
      } 

      else 
      { 
       i = buffers[i].link; 
      } 
     }while (temp = -1); 

    } 
} 

int main(void) 
{ 
    printf("Main called this sendMessage(): \n"); 
    sendMessage(2, 'C'); 
}