在一次编程时误将for写成了while,运行时没报警告(害人),但是结果不对,因此此处整理一下for和while循环的区别加深对着两个循环的理解,此分析价值不大,只是写出来帮助自己在写和调试代码时也许有用:
while (i=0, i<CMD_NUM, i++) //没报警告,能运行,但结果错误
printf("iii=%d.\n",i);//while时此句不执行
{
printf("ii=%d.\n",i);//while时此句不执行
if(!strcmp(str, g_cmdset[i]))//while时此句不执行
{
//如果相等,则说明用户输入的命令在命令集中找到了,就去执行这个命令所对应的动作即可
printf("您输入的命令是:%s,是合法的\n", str);
break; //如果不加此命令,找到后还要继续循环,直至i=3时才停止循环,它的 //作用是停止循环并跳出此for循环,接着去执行下面的语句. 如果加了
//break,当找到了命令后,i的值就是当前的值.注意:如果没加break,
//当找到命令后,循环还会继续,直至for循环的条件不满足即i=3即 //i=CMD_NUM时,才跳出循环。
//这个i=3的值将影响下面的语句.
}
}
printf("i=%d.\n",i);//while时此句不执行
printf("CMD_NUM=%d.\n",CMD_NUM);//while时此句不执行
if(i >= CMD_NUM)
{
//说明找遍了命令集中也没有找到用户输入的这个命令
printf("%s不是一个合法命令,请重新输入:\n", str);
}
执行结果:
aston#led
ii=1.
i=1.
CMD_NUM=3.
aston#
for (i=0, i<CMD_NUM, i++) //没报警告,能运行,但结果错误
printf("iii=%d.\n",i);//把这句当成了假循环体,连续执行3次,i=0,1,2后再执行i++
//即i=3时,不满足条件,退出所谓的假循环体后执行下面的
//语句。
{
printf("ii=%d.\n",i);//i=3
if(!strcmp(str, g_cmdset[i]))//执行此句是条件不成立,跳出循环
{
//如果相等,则说明用户输入的命令在命令集中找到了,就去执行这个命令所对应的动作即可
printf("您输入的命令是:%s,是合法的\n", str);
break;
}
}
printf("i=%d.\n",i);//i=3
printf("CMD_NUM=%d.\n",CMD_NUM);//CMD_NUM=3
if(i >= CMD_NUM) //因为i=3,CMD_NUM=3满足条件,执行循环体
{
//说明找遍了命令集中也没有找到用户输入的这个命令
printf("%s不是一个合法命令,请重新输入:\n", str);
}
执行结果:
aston#lcd
iii=0.
iii=1.
iii=2.
ii=3.
i=3.
while循环:条件在小括号()内,初始化在while循环前,循环次数在循环体中。满足条件直接执行循环体中代码,不执行循环体和while之间的代码。上述的代码循环只执行一次,因为条件: (i=0, i<CMD_NUM, i++)运行后i都是1.
for循环:条件、控制变量的初始化、循环次数都在小括号()中,如果在for和大括号{}之间有代码时,要注意程序会把这部分代码当成假循环体了去连续执行,直至条件不满足后,才跳出循环,特别记住此时的循环次数是不满足条件的情况下的i值即CMD_NUM,