2016-12-08 23 views
-2

ここに私のコードです。 Cで構造体を使用する方法がわかりません。誰かが私の理由を見てみることができますか?私は通常、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の本/チュートリアルを探す時間を取ることができるときには、他人に頼るだけでは大したことではありません。 – kaylum

+1

それはひどく役に立たなかった、ありがとう! –

+0

@kaylumのコメントはまさに私が投稿しようとしていたものです。あなたが書いたことを修正して説明する前に、まず言語を学ぶ必要があります。お買い物にお金をかけたくない場合は、無料でCの本があります。 Cはトライ&エラーで学習する言語ではありません。私たちは個人のサイトではありません! – Olaf

答えて

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"; 

あなたは初期化子でそれらを交換する必要があります。

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[0].message = "empty"; 

とothetの例と同様のステートメントは、この

buffers[header].message = newMessage; 

これらは割り当てある

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

それは少しメンバーを構造体への文字列を代入する方法を理解するためにあなたを助けることがあります。 "私はC言語で構造体を使用する方法がわからない"

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