【发布时间】:2013-04-08 12:28:19
【问题描述】:
你好,我这里有这段代码
int calMode(RECORD list[], int count)
{
int tempMode = 1;
int i = 1, j, k;
int current = 0;
while ( i <= count)
{
k = 1;
if (list[current].score == list[current + i].score)
{
k++;
i++;
}
printf("%d:", list[current].score);
for(j = 0; j <= k ; j++)
{
printf("*");
}
printf("\n");
current = current + k;
i++;
}
return tempMode;
}
我以为代码的逻辑没问题,为什么会进入死循环?
谁能建议修复此代码的方法?并且假设在进入函数calMode之前对数据列表进行了排序,我认为for循环有问题
我编辑了代码知道我的输出是
60
66
71
71
72
75
79
82
82
82
91
size is: 12
73.50
60:**
66:*
71:*
71:*
72:*
75:*
79:*
82:*
82:*
82:*
91:*
输出错误但不再无限循环
【问题讨论】:
-
编辑的目标是什么。在这种情况下,循环将是无限的,但您每次都重新初始化
i... -
你能建议另一种编写这段代码的方法吗,我有点卡在代码的逻辑上
-
实际上,我现在真的不知道你的代码应该做什么
-
它只假设打印出一个直方图,其中分数列表及其出现次数表示为星号,例如,如果我们有 60 和 60,那么代码将输出 60:**跨度>
-
我认为最简单的方法是做两个循环。第一个迭代列表并创建另一个将包含每个值的计数。然后第二个循环迭代先前创建的列表以显示直方图。