为什么我的表函数中的count变量没有递增?

时间:2016-03-12 01:00:22

标签: c

我正在为类做一个项目,我在其中创建一个包含两个随机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;
    }
}

所以这些值都在列表和所有内容中。

2 个答案:

答案 0 :(得分:0)

您无法为每个循环初始化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]);
    }
}

答案 1 :(得分:0)

您需要再次将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);
}
}