簡體   English   中英

為C鏈接列表中的整數賦值

[英]Assigning a value to an integer in a C linked list

我對鏈表有疑問。 我有以下結構和功能,例如。

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

struct entrynode {
    struct node *first;
    struct node *last;
    int length;
};
void addnode(struct entrynode *entry) {
    struct node *nextnode = (struct node *)malloc(sizeof(struct node));
    int temp;
    if(entry->first == NULL) {
        printf("Please enter an integer.\n");
        scanf("%d", &temp);
        nextnode->value = temp;
        nextnode->next = NULL;
        entry->first = nextnode;
        entry->last = nextnode;
        entry->length++;
    } else {
        entry->last->next = nextnode;
        printf("Please enter an integer.\n");
        scanf("%d", nextnode->value);
        nextnode->next = NULL;
        entry->last = nextnode;
        entry->length++;
    }

}

在if語句的第一部分中,我將輸入存儲到臨時變量中,然后將其分配給結構中的字段。 else分支,我試圖直接分配它不起作用。 我該如何直接分配?

謝謝你的時間。

嘗試scanf("%d", &(nextnode->value));

    scanf("%d", nextnode->value);

您需要傳遞一個指向值成員的指針,以保持scanf()的快樂。 固定:

    scanf("%d", &nextnode->value);

也許從中學到的一個教訓是永遠不要將數據輸入代碼與數據結構修改代碼混淆。

順便說一句:請不要使用不必要的括號。 如果你這樣做,你永遠不會學習優先規則。

首先,你有一個錯誤。

其中一行應該是:

scanf("%d", &(nextnode->value));

很抱歉這樣說,但你的代碼太可怕了!

  • 使用比entrynode更好的名稱。 如果它是一個鏈表,為什么不把它稱之為?

  • 我建議你實現以下簽​​名的方法:

    bool addnode(struct entrynode * entry,int value);

  • 返回值可讓您知道添加是否成功。

  • 你有很多代碼重復。 嘗試刪除它。

  • 調用printf和scanf 之后使用上面的方法。

看到printf和scanf在數據結構插入方法中散落,以及如果那么多的代碼的冗余副本,讓我不寒而栗。

它應該是值的地址: scanf("%d", &(nextnode->value));

一般來說,作為對代碼的注釋,請避免重復稱為復制粘貼反模式的代碼。 最多重復使用它。 通常,如果您發現自己處於重復代碼的狀態,請創建一個小函數。

另外,請檢查malloc()調用的返回值。 同樣,請不要在C編程語言中malloc()的返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM