为什么我的程序会循环?

时间:2012-04-27 22:58:09

标签: c++

我试图按递增顺序对二维数组进行排序,并将它们存储在一维数组中(从低到高)。

16 22 99 4 18
-258 4 101 5 98
105 6 15 2 45
33 88 72 16 3

但我所拥有的是保持循环,我不知道为什么

 int main()                  
 {                             
     const int SKIP=-999999;
     const int SIZE=20;
     const int ROWS=4;
     const int COLS=5;         
     int unsorted_array[ROWS][COLS]= {(16,22,99,41,18),
                                      (-258,4,101,5,98),
                                      (105,6,15,2,45),
                                      (33,88,72,16,3)};   
     int s_index=0;
     int min_value,rowMin,rowCol,row,col,colMin;
     int sorted[SIZE];

     cout <<"Array Sorted"<<endl
         <<"___________"<<endl<<endl;


 while (s_index < SIZE)
 {
     rowMin=0;
     rowCol=0;
     min_value = unsorted_array[0][0];
     row=0;
     while (row < ROWS)
     {
         col=0;
         while (col < COLS)
         {
             if (unsorted_array[row][col] < min_value)
             {
                 min_value = unsorted_array[row][col];
                 rowMin = row;
                 colMin = col;
             } 
             ;
             col = col + 1;
         }
         row = row + 1;  
     }
     sorted[s_index] = min_value; 

     while (sorted[s_index] >= 0)
     {
         cout<<" "<<sorted[s_index];
     }
     unsorted_array[rowMin][colMin]=SKIP; 
     s_index=s_index+1; 
}
cout<<endl;

4 个答案:

答案 0 :(得分:7)

如果sorted[s_index] >= 0为真,那将是一个无限循环:

 while (sorted[s_index]>=0)
 {
     cout<<" "<<sorted[s_index];
 }

s_index永远不会在该循环内被更改。

答案 1 :(得分:3)

这是一个问题。 while条件永远不会在循环内部发生变化,因此如果谓词为真,循环将永远不会终止

while (sorted[s_index]>=0){
  cout<<" "<<sorted[s_index];
}  

答案 2 :(得分:2)

如果谓词为真,这是一个明显的无限循环:

while (sorted[s_index]>=0)
   {
     cout<<" "<<sorted[s_index];

   }

答案 3 :(得分:1)

正如其他人已经指出的那样,你的cout循环是无止境的。更好用:

     for (int i=0; i < SIZE ;i++){
         cout<<" "<<sorted[i];
     }
     cout << endl;