c语言变量作用域与声明的关系

正确的代码

#include<stdio.h>
int main()
{
    int n,member[1000],count=0,temp;
    int i=0;
    printf("Input number of person:n=");
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    member[i]=i+1;
    temp=n;
    while(n>1)//1234
    {
        if(member[i]!=0)
        count++;
        if(count==3)
        {
            member[i]=0;
            count=0;
            n--; 
        }
        i++;
        //printf("temp:%d\n",temp);
        if(i==temp)
         i=0;
    } 
     for( int i=0;i<temp;i++)
     {
         if(member[i]!=0)
         printf("The last one is %d",member[i]);
     }
}

我的疑惑点
以下情况会出现错误
第一种
int i;
省略一段代码
for(int i=0;i<n;i++)
省略一段代码
for(i=0;i<temp;i++)
省略一段代码

**第二种 **
int i=0;
省略一段代码
for( i=0;i<n;i++)
省略一段代码
for(int i=0或者i=0;i<temp;i++)
省略一段代码