在 do while 中继续计算,即使不存在任何列

标签 c

我正在尝试做的(不是很成功)是如果我的代码检测到信号 (if(matrix[i][j] ==1)) coming (1 or 0) for接下来的几个步骤,我希望我的代码写入一个新矩阵:newmatrix[i][j]=10,如果不继续,则使用 0。到目前为止,这是我的代码:

    for (i = 0; i < rows; i++) {
        j = 0;
        do {
            if (matrix[i][j] == 1) {
                int m = j;
                while (j < m + 3) {
                    newmatrix[i][j] = 10;
                    printf("newmatrix[%i][%i] and %f\n", i, j, newmatrix[i][j]);
                    j++;
                    continue;
                }
            }
            if (matrix[i][j] == 0) {
                newmatrix[i][j] = 0;
                printf("newmatrix[%i][%i] and 0 is %f\n", i, j, newmatrix[i][j]);
                j++;
                continue;   
            }
            j++;
        } while (j < MAXTIME);
    }
}

问题是,如果在末尾附近有信号而不是在列计数达到最大数量时停止,代码会插入新列,即使它们只有 10:

我的错误在哪里,有人可以指出我正确的方向吗?有没有办法用 goto 语句来做这个更干净?

最佳答案

这是一个使用临时变量的更简单的方法:

for (i = 0; i < rows; i++) {
    int spike = 0;
    for (j = 0; j < MAXTIME; j++) {
        if (matrix[i][j] == 1) {
           spike = 3;
        }
        if (spike) {
           newmatrix[i][j] = 10;
           spike--;
        } else {
           newmatrix[i][j] = 0;
        }
        printf("newmatrix[%i][%i] is %f\n", i, j, newmatrix[i][j]);
    }
}

注意事项:

  • 我假设 matrix[i][j]01。如果其他值是可能的,并且 newmatrix[i][j] 应该对这些单元格保持不变,则应该修改代码。
  • 建议只修改 for 更新子句中的循环索引。 do/while 循环是出了名的容易出错,尤其是嵌套循环也会像您的代码中那样修改循环索引。

关于在 do while 中继续计算,即使不存在任何列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49315651/

相关文章:

c - K&R 错误 : conflicting method definition

c - 如何克服 Stack Smashing 错误?

c - 使用TCP从服务器下载文件

c - 如何循环访问结构成员?

c - 如何使用 STM32 HAL I2C 从 PCT2075 获取温度

c++ - C 预处理器防护?

c - c中的简单malloc函数

c - C中的数组问题

c - 在 C 中返回数组而不是 switch 语句、嵌套值集

c - scanf()不读取EOF吗?