为什么在我的代码中第二个" for"在函数循环中只有一次

时间:2016-07-29 06:41:51

标签: c function for-loop nested-loops

我写了这个嵌套" 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");      
    }
}

3 个答案:

答案 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");
}