C 为什么以下代码段(一个使用“而另一个使用”for)有不同的行为?
我一直在尝试一些涉及循环的基本练习 有人能告诉我为什么下面的代码片段有不同的输出吗 While循环 输出 For循环 输出C 为什么以下代码段(一个使用“而另一个使用”for)有不同的行为?,c,loops,for-loop,while-loop,C,Loops,For Loop,While Loop,我一直在尝试一些涉及循环的基本练习 有人能告诉我为什么下面的代码片段有不同的输出吗 While循环 输出 For循环 输出 它们不是应该具有相同的输出吗?您从未在while循环中重新控制变量。尝试: while (i<3) { j = 0; while(j<3) { printf("(%d %d) ",i,j); j++; } i++; } 在您的代码中,发生的事情很简单-对于第一个循环,i=0,j=0,1,2
它们不是应该具有相同的输出吗?您从未在while循环中重新控制变量。尝试:
while (i<3)
{
j = 0;
while(j<3)
{
printf("(%d %d) ",i,j);
j++;
}
i++;
}
在您的代码中,发生的事情很简单-对于第一个循环,i=0,j=0,1,2,3对于第二个循环,i=1,j=3…内部while循环只执行一次,因为您的j变量等于3,并且永远不会重置。在while循环开始之前,您不会像for循环那样重新初始化变量。试试这个:
i = 0;
while (i<3)
{
j = 0;
while(j<3)
{
printf("(%d %d) ",i,j);
j++;
}
i++;
}
在while语句中,j的值保持为3,不再执行。它在for循环中重置 有人能告诉我为什么下面的代码片段有不同的输出吗 是的,它们并不等同。要使这两段代码等效,需要在while循环中初始化i=0,尤其是j=0,如下所示:
i = 0;
while (i < 3) {
j = 0;
while(j < 3) {
printf("(%d %d)", i, j);
j++;
}
i++;
}
翻译成
init-statement
while(condition) {
statement
expression
}
j = 0;
while(j < 3) {
printf("(%d %d)", i, j);
j++;
}
特别是,
for(j = 0; j < 3; j++)
printf("(%d %d)", i, j);
这是第一关
i = 0;
while(i < 3) {
for(j = 0; j < 3; j++)
printf("(%d %d)", i, j);
i++;
}
最后
i = 0;
while(i < 3) {
j = 0;
while(j < 3) {
printf("(%d %d)", i, j);
j++;
}
i++;
}
正如其他人所说,您还没有重置j变量。总的来说,我可以说
s1;
while(condition){
s0;
s2;
}
。。。不等于
for(s1;condition;s2){
s0;
}
。。。因为如果s0包含continue,那么s2在第一种情况下不执行,而在第二种情况下执行
其次,s1中的变量声明将限于第二种情况下的循环。这曾经是人们想要的,但有时不是。在这种情况下,可以在循环之前进行声明。这就是为什么要在变量应该存在的范围内声明变量。例如,这将返回与从For中获得的值相同的值
while (i<3)
{
int j;
while(j<3)
{
printf("(%d %d) ",i,j);
j++;
}
i++;
}
为什么??因为j是为外部while的每个循环重新创建的。又短又甜,当变量j在i的第一次迭代后达到3时,您没有重置它。
始终在使用while变量之前初始化它们。在原样的代码中,第二个while不会再次激发,因为j==3。这是使for和while保持一致的正确方法。添加一行来显式初始化变量有助于使问题更清楚。如果您讨论的是Ninefingers的答案,变量j,那么它不会在其循环中重新初始化,因此它是正确的。@Erkan H-我不是在讨论Ninefingers的答案,我们几乎在几秒钟内就互相发布了帖子,我怎么可能一直在谈论他/她的答案呢?我误解了你的帖子,对不起。
for(i = 0; i < 3; i++) {
for(j = 0; j < 3 ; j++)
printf("(%d %d)", i, j);
}
i = 0;
while(i < 3) {
for(j = 0; j < 3; j++)
printf("(%d %d)", i, j);
i++;
}
i = 0;
while(i < 3) {
j = 0;
while(j < 3) {
printf("(%d %d)", i, j);
j++;
}
i++;
}
s1;
while(condition){
s0;
s2;
}
for(s1;condition;s2){
s0;
}
while (i<3)
{
int j;
while(j<3)
{
printf("(%d %d) ",i,j);
j++;
}
i++;
}