我正在尝试做的(不是很成功)是如果我的代码检测到信号 (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]
是0
或1
。如果其他值是可能的,并且newmatrix[i][j]
应该对这些单元格保持不变,则应该修改代码。 - 建议只修改
for
更新子句中的循环索引。do
/while
循环是出了名的容易出错,尤其是嵌套循环也会像您的代码中那样修改循环索引。
关于在 do while 中继续计算,即使不存在任何列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49315651/