C 预期的';)';在'之前*';令牌传入节点

C 预期的';)';在'之前*';令牌传入节点,c,struct,linked-list,C,Struct,Linked List,我搜索了这个问题,前面的问题似乎与我的问题无关。我似乎在将节点传递到函数时出现了断开连接的情况,出于某种原因,我在尝试编译时不断遇到此错误 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char c; int titleCount; int authorCount; char bookTitle[35]; char

我搜索了这个问题,前面的问题似乎与我的问题无关。我似乎在将节点传递到函数时出现了断开连接的情况,出于某种原因,我在尝试编译时不断遇到此错误

代码:

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

int main() {
    char c;
    int titleCount;
    int authorCount;
    char bookTitle[35];
    char author[35];

    /* Create Struct */
    typedef struct bookData {
        char bookTitle[35];
        char author[35];
        int book_stock;
        float retail_price;
        int wholesale_purchased;
        int customer_purchased;
        struct bookData *book;
    } new_book;

    /*Create Node */

    typedef struct Node {
        new_book books;
        struct Node *next;
    } node_t;

    /* We are GUARANTEED at least 1 input value, so go ahead and initialize the head */

    node_t *head = NULL; /*Initalize head to NULL since it is empty */
    head = malloc(sizeof(node_t));
    if(head == NULL) {
        printf("allocation failed");
        return 0;
    }
    head -> next = NULL;
    /*Memory allocation successful */

    /*Might as well populate the head with data from the user */

    titleCount = 0;
    authorCount = 0;

    printf("Enter Title\n");
    while(( c = getchar()) != '\n') {
        bookTitle[titleCount++] = c;

    }
    bookTitle[titleCount] = '\0';

    printf("%s\n", bookTitle);
    strcpy(head -> books.bookTitle, bookTitle);

    printf("Enter Author\n");
    while(( c = getchar()) != '\n') {
        author[authorCount++] = c;
    }
    author[authorCount] = '\0';
    strcpy(head -> books.author, author);

    printf("Bookstock #:\n");
    scanf("%d", &(head -> books).book_stock);

    printf("Enter retail price $:\n");
    scanf("%f", &(head -> books).retail_price);

    printf("Enter Wholesale purchased quanity:\n");
    scanf("%d", &(head  -> books).wholesale_purchased);

    printf("Enter quantity sold:\n");
    scanf("%d", &(head -> books).customer_purchased);

    printf("%s\n", head -> books.bookTitle);

    printf("%s\n", head -> books.author);

    printf("%d\n", head -> books.book_stock);

    printf("%.2f\n", head -> books.retail_price);

    printf("%d\n", head -> books.wholesale_purchased);

    printf("%d\n", head -> books.customer_purchased);

    takeUserInput(head);
}

/*Now populate all other nodes, until user enters END_DATA */

void takeUserInput(node **head) {
    int titleCount;
    int authorCount;
    char bookTitle[35];
    char author[35];

    int flag = 0;

    while(1) {
        titleCount = 0;
        authorCount = 0;
        node_t *temp = NULL;
        temp = malloc(sizeof(node_t));
        temp -> next = NULL;
        printf("Enter Title\n");
        while(( c = getchar()) != '\n') {
            bookTitle[titleCount++] = c;
        }
        bookTitle[titleCount] = '\0'
        if(bookTitle == "END_DATA") {
            flag = 1;
            break;
        }
        strcpy(temp -> books.bookTitle, bookTitle);

        printf("Enter Author\n");
        while(( c = getchar()) != '\n') {
            author[authorCount++] = c;
        }
        author[authorCount++] = '\0';
        strcpy(temp -> books.author, author);


        printf("Bookstock #\n");
        scanf("%d", &(temp - > books).book_stock);

        printf("Enter retail Price in $\n:");
        scanf("%.2f", &(temp -> books).retail_price);

        printf("Enter wholesale purchased\n:");
        scanf("%d", &(temp -> books).wholesale_purchased);

        printf("Enter customer purchased\n:");
        scanf("%d", &(temp -> books).customer_purchased);

        if(temp -> books.book_stock < head -> books.book_stock) {
            void pushToFront(head, temp);
        } else {
            void insert(head,temp);
        }
    }
    if(flag == 1) {
        free(temp);
    }

}

void pushToFront(node_t **head, node_t *temp) {
    temp -> next = *head;
    *head -> temp;
}

void insert(node_t *head, node_t *temp) {
    node_t *current = head;
    while(current -> next -> new_book.book_stock  < temp -> new_book.book_stock || current -> != NULL) {
        current = current -> next;
    }
    if(current -> next = NULL) {
        current -> next = temp;
    }
    node_t *xtraNode = current -> next
                       current -> next = temp;
    temp -> next = xtraNode;
}

据我所知,在调整头部指向
pushToFront
的节点时,我只需要传入一个双指针。因此,在
insert()
,我实际上并没有调整头部指针,只是调整特定节点和被插入节点的
下一个指针。所以我有点困惑,为什么会发生这个错误。

我花了一点时间尝试编译您的代码,但是错误的数量是惊人的。您的代码需要您认真关注

首先从简单的事情开始。 首先将结构声明移动到
main
之前:

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

/* Create Struct */
typedef struct bookData{
    char bookTitle[35];
    char author[35];
    int book_stock;
    float retail_price;
    int wholesale_purchased;
    int customer_purchased;
    struct bookData *book;
}new_book;

/*Create Node */

typedef struct Node{
    new_book books;
    struct Node *next;
}node_t;

void takeUserInput(node_t **head);
void pushToFront(node_t **head, node_t *temp);
void insert(node_t *head, node_t *temp);

int main(){
 //...
}
应该是:

   void takeUserInput(node_t **head){
   takeUserInput(&head);

应该是:

   void takeUserInput(node_t **head){
   takeUserInput(&head);

后来

我还注意到你还没有接受一个答案


我在这里停下来,让你自己继续。祝你好运每个人都有自己的十字架

请正确缩进代码,这样做可能会发现语法错误(可能是缺少分号)。第二,您将
typdef
定义为
node\u t
,但尝试声明
void takeUserInput(node**head){
。请参见:第114行是
int flag=0;
node\u t*xtraNode=current->next
(靠近文件末尾)缺少分号。@Kyle您必须在
main
之外有
struct
类型声明,否则您将无法编写包含该类型参数的函数。谢谢,最大的问题是结构定义。我很快就解决了that@Kyle太好了!听到这个消息我很高兴!
   takeUserInput(&head);
void takeUserInput(node_t **head){ // node_t not node sg7
    int titleCount;
    int authorCount;
    char bookTitle[35];
    char author[35];
    int c;       // declaration was missing sg7!
bookTitle[titleCount] = '\0'   // missing ;
if(bookTitle == "END_DATA"){   // this is NOT the way to compare strings