c 嵌套循环,内层循环只执行一次?

发布于 2022-09-11 19:48:55 字数 475 浏览 46 评论 0

如题,c嵌套循环的时候,这种写法内层只执行了一次,求解!

#include <stdio.h>

void draw_box(int, int);
int main()
{
    draw_box(4, 5);
    return 0;
}

void draw_box(int row, int column)
{
    for (; row > 0; row--)
    {
        for (; column > 0; column--)
        {
            printf("x ");
        }
        printf("\n");
    }
}

结果中,明显换行输出了4次,但是内循环只执行了一次。

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

黎歌 2022-09-18 19:48:55

外层循环执行完毕,要对 column 重新赋值,不然第一次循环之后 column 始终等于0,就不再继续执行了。

疯到世界奔溃 2022-09-18 19:48:55

抱歉!我有必要重新在给你答案,因为我上面给出的答案有些错误已经不是专业不专业问题了。

drawbox函数两个形参int row,column, 实际就是drawbox的局部变量。

两个for循环的变量row和column由于在定义函数时候没有“宣告”,所以代码编译的时候,row和column不被当作for"块内"变量, 而被当作是drawbox的局部变量:int row, column;

所以for(column)这个循环执行第一周时候,column--作用在drawbox的局域变量column,所以在下一个循环的时候,for(column) 中的column由于是drawbox的column并且改写了column(等于0),所以column在后面一直等于0。

我对for循环跟一般函数对外部变量的引用有些混肴了。在给出答案前一些概念没有捋清。羞愧。。。

下面是其中一个改善方法:
for(int i=column;i>0;i--)

特别要更正的是,for循环结束时会释放它的局部变量的栈空间,假如当时for循环真有局域变量的话,在释放栈空间之后将不存在,所以不存在我第一次答案末尾对column 状态的观点,也就是如果column是for的本地变量的话,每次循环一周后,for本地的column的桟都会被“构析”,下一个循环的时候,for的column重置。

而在本例中,for(column) 初始值位置没有对column宣告,所以column不是它的本地变量,而是引用了drawbox的变量。

握住你手 2022-09-18 19:48:55

基本的循环知识掌握的不够好!

内部循环完成后,需要在循环前面从新赋值

clipboard.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文