为什么这两个代码给出不同的输出? for 循环不就是 while 循环的缩写吗?

Why are these two codes giving different output? isn't a for loop just a short-hand for a while loop?

-我正在尝试制作一个程序来检查一个数字是否是一个强数字。

-我用的是C语言

-我的问题是我似乎找不到 for 和 while 循环之间的区别,即使它们看起来相同,但出于某种原因它们总是给出不同的输出。

-尽管这不是我第一次遇到这样的问题,但我似乎从来没有发现区别!

-这是带有 for 循环的代码:(给出我预期的输出)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int number, q, rem, fac = 1, result=0, i;
    printf("please enter a number: ");
    scanf("%d", &number);

    q = number;
    i = 1;

    while(q != 0){
        rem = q%10;
        for(i = 1; i<=rem; i++){      //   <---  THE FOR LOOP HERE  ****
            fac = fac*i;
        }
        result = result + fac;
        fac = 1;
        q = q/10;
    }

    if(number == result){
        printf("%d is a strong number", number);
    }
    else{
        printf("-%d is not a strong number\n", number);
        printf("-your result was %d instead of %d", result, number);
    }
    return 0;
}

-这是带有 while 循环的相同代码:(给出错误的输出)

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int number, q, rem, fac = 1, result=0, i;
    printf("please enter a number: ");
    scanf("%d", &number);

    q = number;
    i = 1;

    while(q != 0){
        rem = q%10;
        while(i <= rem){      //   <---  THE WHILE LOOP HERE  ****               
            fac = fac*i;
            i++;
        }
        result = result + fac;
        fac = 1;
        q = q/10;
    }

    if(number == result){
        printf("%d is a strong number", number);
    }
    else{
        printf("-%d is not a strong number\n", number);
        printf("-your result was %d instead of %d", result, number);
    }
    return 0;
}

发布的版本之间存在细微但重要的区别:

  • for(i = 1; i<=rem; i++)中迭代变量i在每次循环出现时被初始化为1
  • 在第二个版本中,while(i <= rem)使用相同的测试,循环体中的i++执行相同的递增,但初始化i = 1; 只在外层循环之前发生一次,因此行为不同。

这个问题是 for 循环优于 while 循环进行简单迭代的完美示例。在编码约定中强制使用 while 循环会适得其反,例如某些法国 CS 学校强制执行的循环。