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

0 c for-loop function 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");      
    }
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 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");      
}
Run Code Online (Sandbox Code Playgroud)

这说明了为什么在将作为参数传递给函数的值修改时应该非常小心.使用循环变量,您的函数将易于编写并且更易于阅读:

for(int r = 0 ; r != row ; r++) {
    for(int c = 0 ; c != column ; c++)
        printf("X");
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

  • @ Sina.Mh因为它在外循环中,所以你只需要将它运行到零一次.相反,`column`需要多次运行为零. (3认同)