C 中的内循环和外循环

问题描述 投票:0回答:4
int a = 0, b = 0, c;

while ( a < 10){
    while (b < 10){
        c = a * b;
        b++;
    }
    a++;
}

变量 b 正在递增,但 a 没有。 A 保持 0 并且不会改变,直到最后一行它神奇地变成 10,即使 C 在整个循环中都是 0。我错过了什么吗?抱歉我是初学者。

c loops while-loop
4个回答
4
投票

在进入循环之前,您不会重新初始化

b
。应该是:

int a = 0, b = 0, c;
while ( a < 10)
{
    b = 0;
    while (b < 10)
    {
        c = a * b;
        b++;
    }
    a++;
}

如果不这样做,那么内循环只会进入一次,因为对于

a
的每次迭代,
b
不再是< 10.


2
投票

当a第一个a++时,b已经变成10了。内层looper永远不会再进入。我猜你在内循环中打印了这两个变量。所以你会看到停留 0,并在 2while 循环后弹出到 10。


1
投票

请运行代码,您就会得到它。问题是,一旦

second
while 循环开始,b'a 值就会变成
b=10
。因此,当外循环运行
a =1
(第二次)时,此时
b=10
,因此内循环条件失败。

#include <stdio.h>


void main()
{
int a = 0, b = 0, c;

while ( a < 10){
printf("out:  a : %d\tb: %d\tc: %d\n", a,b,c);  
    while (b < 10){
    printf("in:  a : %d\tb: %d\tc: %d\n", a,b,c);       
        c = a * b;
        b++;
    }
    a++;
}
printf("a : %d\tb: %d\tc: %d\n", a,b,c);
}

You need to reinitialize the b's value every time when it goes to inner loop


0
投票

我建议你在第一个 while 循环中做。 打印所有变量。并在外循环中执行相同的操作以确认您的值。

int a = 0, b = 0, c;

while ( a < 10){
    while (b < 10){
        c = a * b;
        b++;
        printf("Inner Loop :\n");
        printf("value of a :%d; value of b :%d;value of c :%d\n",a,b,c);
    }
    a++;
    printf("OuterLoop :\n");
    printf("value of a :%d; value of b :%d;value of c :%d\n",a,b,c);
}
© www.soinside.com 2019 - 2024. All rights reserved.