2

これが私のコードです。Linked List を正しく実装したと確信していますが、いくつかの構文エラーがあると思います。

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

struct node {
    int data;
    struct *node next;
};

void push(struct node** headRef, int data)
{
    struct node* newNode;
    newNode = malloc(sizeof(struct node));
    newNode->data = data;
    newNode->next = *headRef;

    *headRef = newNode;
}

struct node* primeFactors(int num)
{
    struct node* head = NULL;
    if (num == 1)
    {
        return head;
    }
    int factor = 0;
    int i = 2;
    while (i <= num)
    {
        if (num % i)
        {
            factor = i;
        }
    }
    push(&head, factor);
    primeFactors(num / factor);
    return head;
}

int main(int argc, char const *argv[])
{
    struct node* head = primeFactor(600851475143);
    printf("%d/n", head->data);
}

ここに私のエラーがあります。これらのほとんどが何を意味するのかわかりませんが、構造体ノードには間違いなく next という名前のメンバーが必要です。

    [1] $ gcc 3.c -o 3                                                                                                                 
    3.c:6:9: エラー: '*' トークンの前に '{' が必要です
    3.c: 関数「プッシュ」内:
    3.c:14:9: エラー: 'struct node' には 'next' という名前のメンバーがありません
    3.c: 関数「main」内:
    3.c:42:22: 警告: 初期化により、キャストなしで整数からポインターが作成されます [デフォルトで有効]

助けていただければ幸いです。

4

4 に答える 4

6

構造体メンバーの間違った場所にアスタリスクがありますnext。それ以外の

struct *node next;

そのはず

struct node *next;

また、メイン関数にもタイプミスがあり、initialization makes pointer from integer警告が発生します。入力しました

struct node* header = primeFactor(600851475143);

しかし、あなたの関数の名前はprimeFactors複数形なので、そうあるべきです

struct node* header = primeFactors(600851475143);

また、関数のパラメーターとして間違ったデータ型を使用していますprimeFactors。符号付き 32 ビット整数は 600851475143 の値を格納できないため、値を割り当てるとオーバーフローします。作業しているシステムがそれをサポートしていると仮定すると、代わりにuint64_torを使用し、形式として "%llu" を使用します。unsigned long longintprintf

于 2012-11-05T19:27:29.290 に答える
3

定義で を誤って配置*しました。struct nodeする必要がありますstruct node* next;

于 2012-11-05T19:27:38.757 に答える
3

struct *node next;する必要がありますstruct node * next;

于 2012-11-05T19:27:39.243 に答える
3
  struct *node next; 

する必要があります

 struct node *next;
于 2012-11-05T19:27:51.487 に答える