簡體   English   中英

為什么我的表函數中的count變量沒有增加?

[英]Why isn't the count variable in my table function being incremented?

我正在為一個班級做一個項目,在此我制作了一個結構的有序鏈接列表,其中包含兩個隨機的1-6卷及其總數。 我正在嘗試創建一個兩列的表。 左列將是數字1-13(所有可能的總數加上兩個不可能的值1和13),右列將是每個可能總數的出現次數。

這是我為執行此任務而編寫的函數。

void table(struct node * roll_list){
    int i;
    int count;
    int total;

    for(i = 1; i < 14; i++){
        count = 0;
        while(roll_list){
            total=roll_list->total;
            if(i==total){
                count++;
                roll_list = roll_list->next;
            }else{
                roll_list = roll_list->next;
            }
    }
    printf("%d : %d\n",i,count);
    }
}

該函數包含一個執行13次的for循環。 對於每個i值,將變量count設置為0,並執行在列表中運行的while循環。 while循環中是if else語句。 如果i等於當前節點總數,則count變量增加,然后移至下一個節點。 否則,我們將移至下一個節點而不增加i變量。

while循環完成之后,一條print語句為兩列中的每一列打印該行。 然后for循環重新開始下一個i值,等等。

我遇到的問題是出現次數列的輸出始終為零,這表明count變量沒有增加。

我還有另一個功能,可以打印一張略有不同的表格,並且效果很好。

void print_list(struct node * roll_list){
    while(roll_list){
        printf("Roll one: Dice01: %d,  Dice02: %d,  Total: %d\n", roll_list->dice01, roll_list->dice02, roll_list->total );
        roll_list = roll_list->next;
    }
}

因此,值都存在於列表中以及所有內容中。

您未能為每個循環初始化roll_list

您應該使用另一個變量在循環中進行迭代。

void table(struct node * roll_list){
    struct node * roll;
    int i;
    int count;
    int total;
    for(i = 1; i < 14; i++){
        count = 0;
        roll = roll_list;
        while(roll){
            total=roll->total;
            if(i==total){
                count++;
                roll = roll->next;
            }else{
                roll = roll->next;
            }
        }
        printf("%d : %d\n",i,count);
    }
}

另一種方法:如果最大數量固定,為什么不在一個循環中計算所有count

void table(struct node * roll_list){
    int i;
    int count[14] = {0}; /* initialize all elements to zero */
    int total;
    while(roll_list){
        total=roll_list->total;
        if(1 <= total && total < 14){
            count[total]++;
        }
        roll_list = roll_list->next;
    }
    for (i = 1; i < 14; i++){
        printf("%d : %d\n",i,count[i]);
    }
}

您需要再次將roll_list指向頭指針;

void table(struct node * roll_list){
int i;
int count;
int total;
struct node *head = roll_list;
for(i = 1; i < 14; i++){
    count = 0;
    roll_list = head;
    while(roll_list){
        total=roll_list->total;
        if(i==total){
            count++;
            roll_list = roll_list->next;
        }else{
            roll_list = roll_list->next;
        }
}
printf("%d : %d\n",i,count);
}
}

暫無
暫無

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

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