gpt4 book ai didi

c - 为什么我的表函数中的计数变量没有增加?

转载 作者:行者123 更新时间:2023-11-30 17:04:02 24 4
gpt4 key购买 nike

我正在为类(class)做一个项目,其中我制作了一个有序的结构链接列表,其中包含两个随机的 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 循环完成后,打印语句将打印两列中每一列的行。然后,for 循环开始处理下一个 i 值等。

我遇到的问题是出现次数列的输出始终为零,这表明计数变量没有增加。

我有另一个函数,可以打印一个稍微不同但工作正常的表格。

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]);
}
}

关于c - 为什么我的表函数中的计数变量没有增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35952472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com