c语言初学者求纠错,自己看不出来

c语言初学者,请问这段代码为什么可以运行但没有任何输出呢。同时代码若有不足希望指正。

代码如下
/*水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例如:153 = 1 + 125+ 27。本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3<=N<=7)。

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行*/
#include
int main()
{
int N=0;
printf("输入一个数字:");
scanf("%d",&N);
int x=1;
int n=N;
for (;n>0;n=n-1)
{
x*=10;
}
n=N; //水仙花数小于x
int y=x/10; //大于y 且y为水仙花数的位数及最小值
int a;
int sum=1;
int T=0;
for (a=y;a{ int b=a;
int c; //接下来定义b以取得a的不同位数 并进行N次方相加得T 判断是否与a相等
while (b>0)
{ c=b%10;
while (n>0)
{sum=sum*c;
n=n-1;
T=T+sum;
sum=1;
}
b=b/10;
}
if (T==a)
{
printf("%d\n",a);
}
a=a+1;
T=0;
n=N;
}
return 0;
}

题主代码修改如下,修改处见注释,供参考:

#include <stdio.h>
int main()
{
    int N = 0;
    printf("输入一个数字:");
    scanf("%d", &N);
    int x = 1;
    int n = N;
    for (; n > 0; n = n - 1)
    {
        x *= 10;
    }
    n = N; //水仙花数小于x
    int y = x / 10; //大于y 且y为水仙花数的位数及最小值
    int a;
    int sum = 1;
    int T = 0;
    for (a = y; a < x;) //a要从最小的N位数开始加至最大的N位数
    {
        int b = a;
        int c; //接下来定义b以取得a的不同位数 并进行N次方相加得T 判断是否与a相等
        while (b > 0)
        {
            c = b % 10;
            while (n > 0)
            {
                sum = sum * c;
                n = n - 1;
            }//修改
            T = T + sum;
            sum = 1;
            n = N; //修改
            //}修改
            b = b / 10;
        }
        if (T == a)
        {
            printf("%d\n", a);
        }
        a = a + 1;
        T = 0;
    }
    return 0;
}

正确代码如下,如有帮助请点击一下采纳谢谢:

#include <stdio.h>

#include <math.h>

int main()
{
    int n,j,i;
    double start,reigon;
    scanf("%d",&n);
    start=pow(10,n-1);
    reigon=pow(10,n);
    for(i=start;i<reigon;i++)
    {
        int sum=0,temp=i;
        while(sum<=i&&temp!=0)
        {
            int mod=temp%10;
            int k=1;
            for(j=1;j<=n;j++)
                k=k*mod;
            sum=sum+k;
            temp /=10;
        }
        if(sum==i)
            printf("%d\n",i);
    }
    return 0;
}