0

嗨,我这里有这段代码

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:* 

输出错误但不再处于无限循环中

4

3 回答 3

3
 if (list[current].score == list[i].score)
 {
     k++;
     i++;
 }

如果这个测试是错误的,i将永远不会增加,这里是无限循环。

于 2013-04-16T07:39:31.043 回答
1

修复例如

int calMode(RECORD list[], int count){
    int tempMode = 1;
    int i, k;
    int current = 0;

    while (current < count){
        printf("%d:", list[current].score);
        for(k=0; (i=current + k) < count ; ++k){
            if(list[current].score == list[i].score)
                printf("*");
            else 
                break;
        }
        printf("\n");
        current = current + k;
    } 
   return tempMode;
}
于 2013-04-16T08:27:35.263 回答
0

根据您的代码,如果第 0 个元素和第一个元素的分数不相等,它将进入无限循环。我认为一些增量条件也应该在 if 语句之外。[我不知道你的逻辑,这只是一个猜测]

于 2013-04-16T07:58:11.537 回答