关于for循环出现的异常情形
for循环中的自增变量自增到1498时,突然一下跳到1501。一开始我以为是计算机意外计算错误,就重复实验了一次,结果每次都是一样从1498跳到1501。我单独另建文件进行for循环测试,能正常进行自增1的运算。代码如下:
int gf2rref(int **matrix, int nRow, int nCol)
{
FILE *fp;
int rank = 0;
int row, col;
int i, j;
int temp;
for(col = 0; col < nCol; col++)
{
/* 查找第col列中第col行及col行以下的第一个1所在的行 */
row = col;
while(row < nRow && matrix[row][col] == 0)
row++;
if(row < nRow)
{
rank++;
// printf("col=%d rank=%d, ", col, rank);
if(row > col)
for(i = col; i < nCol; i++) /* 交换第row行和第col行 */
{
temp = matrix[col][i];
matrix[col][i] = matrix[row][i];
matrix[row][i] = temp;
}
for(i = 0; i < nRow; i++)
if(i != col && matrix[i][col] == 1)
for(j = col; j < nCol; j++) /* 第col行加到第i行,使第col列(col,col)为1,其它位置元素值为0 */
matrix[i][j] ^= matrix[col][j];
}
}
if((fp = fopen("recoding32.txt", "w")) == NULL) // 打开存放RS编码二进制形式文件
{
printf("cannot open the file\n"); // 如果打开时出错,就输出“打不开”的信息
exit(0); // 终止程序
}
for(i = 0; i < nRow; i++)
{
for(j = 0; j < nCol; j++)
fprintf(fp, "%d", matrix[i][j]);
fprintf(fp, "\n");
}
fclose(fp);
return rank; // 返回矩阵的秩
}