一个关于C语言的问题

为什么第一个运行结果只有两个,但是第二个可以有很多个?
#include <stdio.h>

#define MAX 200int main() {
int i,n,cnt=0;
for (n=2;n<MAX;n++) {
for (i=2;i<n;i++)
if (n%i==0) cnt++;
if (cnt==0) printf("%5d",n);
}
return 0;}

第二个
#include <stdio.h>
#define MAX 200
int main() {
int i,n,cnt=0;
for (n=2;n<MAX;n++) {
for (i=2;i<n;i++)
if (n%i==0) break;
if (i==n) printf("%5d",n);
}
return 0;}

第一块代码的cnt每次都需初始化为0,否则会沿用上一次的值,只要++一次就出问题了


#include <stdio.h>
#define MAX 200
int main() {
    int i,n,cnt=0;
    for (n=2; n<MAX; n++) {
        //cnt每次都要初始化 
        for (i=2,cnt = 0; i<n; i++)
            if (n%i==0) cnt++;
        if (cnt==0) printf("%5d",n);
    }
    return 0;
}