我写了这个嵌套" for"程序,但第二个循环只工作一次并打印一行" x"
#include <stdio.h>
void draw_box(int , int);
int main(int argc, char **argv)
{
draw_box(8 , 35);
return 0;
}
void draw_box(int row , int column)
{
for(;row>0;row--)
{
for(;column>0;column--)
printf("X");
printf("\n");
}
}
答案 0 :(得分:9)
第二个循环只运行一次,因为它将column
的值运行为零,并且永远不会将其重置为作为参数传入的原始值:
for(;row>0;row--) {
int origColumn = column; // Save the value
for(;column>0;column--)
printf("X");
column = origColumn; // Restore the value
printf("\n");
}
这说明了为什么在将作为参数传递给函数的值修改时应该非常小心。使用循环变量,您的函数将易于编写并且更易于阅读:
for(int r = 0 ; r != row ; r++) {
for(int c = 0 ; c != column ; c++)
printf("X");
printf("\n");
}
答案 1 :(得分:0)
这里的问题是,你的第二个循环迭代到零,并且从不休息到它的原始值。您可以将值分配给临时变量并将其用于迭代,并在第二个“for”循环结束时,将temp值设置回默认值 OR 您可以更改for循环结构通过赋值变量j = 0,并反复迭代直到它不满足条件j
第一个for循环没有遇到这个问题,因为当你输入第一个for循环时,第二个for循环在控制返回第一个for循环之前执行“column”次。< / p>
答案 2 :(得分:0)
使用嵌套for循环时
for(;row>0;row--)
{
for(;column>0;column--)
printf("X");
}
对于行的每个值,您将遍历整个列。
因此,X打印列次数。
但是,每次遍历外部循环时,列的值将减少为零。
为了澄清,请考虑内循环:
如果列的值为5,则
打印 X ,列的值减少到4
同样,X将被打印5次,此时,列的值减少为零
现在,对于外循环的第二次迭代,列的值仍为零,并且它不会传递内循环条件。因此,您的指针不会在第二个循环内移动以打印 X 。
如何克服这个问题:使用循环变量
现在,每次遍历内循环时,循环变量的值将减少而不是列。
因此,在第二次迭代外循环时, loop-variable 的值将恢复为 column 的值,然后 X 可以打印列次数(在本例中为5)。
解决方案:
for(i = 0; i < row; i++){ //Good habit to start from 0, as it is
for(j = 0; j < column; j++){ //useful when you are working with matrix
printf("X");
}
printf("\n");
}