[英]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.