C语言 循环 水仙花数 无error但是不停输出1

问题遇到的现象和发生背景 : 本人刚学C语言练习编程题,让输入一个数n,然后输出所有的n位“水仙花”数,就是一个n位数等于各个位数的n次方和
遇到的现象和发生背景,请写出第一个错误信息 : 我的代码会不停地输出1;如果把printf里输出的变量改了,也可能不停地输出1和0,反正就是不输出“水仙花”数
用代码块功能插入代码,请勿粘贴截图。 不用代码块回答率下降 50%
int main()
{
    int n,i,s,m=1;
    scanf("%d",&n);
    for(i=1;i<n;i++)
    m=m*10;
     for(i=m;i<m*10;i++)
    {
        int k=i;
        int sum=0;
        while(i>0)
        {
         int j=i%10;
         int p=j;
         i=i/10;
         for(s=1;s<n;s++)
         p=p*j;
         sum=sum+p;
        }
    if(sum==k)
    printf("%d ",k);
     }
    return 0;
}


运行结果及详细报错内容 : 一直不断地输出1
我的解答思路和尝试过的方法,不写自己思路的,回答率下降 60% : 我不用for循环,改用如下do-while可以得到正确结果
int main()
{

int n;
scanf("%d",&n);
int first=1;
int i=1;
while(i<n){
    first*=10;
    i++;
}
printf("first=%d\n",first);
i=first;
while(i<first*10){
    int t=i;
    int sum=0;
    do{
        int d=t%10;
        t/=10;
        int p=d;
        int j=1;
        while(j<n){
            p*=d;
            j++;
        }
        sum+=p;
    }while(t>0);
    if(sum==i){
        printf("%d\n",i);
    }
    i++;
}
return 0;
}


我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏” : 请好人帮我看看for循环那段代码里哪里出问题了

你在循环中改变了i的值,导致循环结束不了


int main()
{
   int n, i, s, m = 1;
   scanf("%d", &n);
   for (i = 1; i < n; i++)
      m = m * 10;
   for (i = m; i < m * 10; i++)
   {
      int k = i;
      int sum = 0;
      while (k > 0) //(i > 0)
      {
         int j = k % 10;//int j = i % 10;
         int p = j;
         k = k / 10; // i = i / 10;
         for (s = 1; s < n; s++)
            p = p * j;
         sum = sum + p;
      }
      if (sum == i)        //(sum == k)
         printf("%d ", i); // printf("%d ", k);
   }
   return 0;
}