怎么让它遇到水仙花数就不输出0

这是错误的,该怎么改,对了,我是初学者,很多知识不懂,希望答案能简单一点,最好用while循环
#include <stdio.h>
int main()
{
int a,b,m,c,d,e,i=0;
scanf("%d %d",&a,&b);
if(a>b) b=m,a=b,a=m;

while(a<=b){

c=a%10;d=a/10%10;e=a/100;

if (a==ccc+ddd+eee)
{
printf("%d",a);
i++;}

 while  (i==1)

{
printf("0");break;}
a++;
}

return 0;
}


int main()
{
int a,b,m,c,d,e,i=0;
scanf("%d %d",&a,&b);
if(a>b) b=m,a=b,a=m;

while(a<=b){

c=a%10;d=a/10%10;e=a/100;

if (a==c*c*c+d*d*d+e*e*e)
{
printf("%d ",a);
i++;}

while  (i==1)
{
break;}
a++;
}

return 0;
}

题主没有说代码具体意图,看题主的代码,猜测是输出a到b之间的数,不为水仙花数输出0,直到输出第一个水仙花数


int main()
{
    int a,b,m,c,d,e;
    scanf("%d %d",&a,&b);
    if(a>b) b=m,a=b,a=m;

    while(a<=b){
        c=a%10; d=a/10%10;e=a/100;
        if (a==c* c * c + d * d * d+ e * e * e) {
            printf("%d ",a);
            break;
        }

        else {
            printf("0 ");
        }
        a++;
    }
    return 0;
}

代码修改如下,修改的地方有注释


#include <stdio.h>
int main()
{
    int a, b, m, c, d, e, i = 0;
    scanf("%d %d", &a, &b);
    if (a > b) { m = a; a = b, b = m; } //修改,这里需要加 {},且逻辑需要修改

    while (a <= b) {

        c = a % 10; d = a / 10 % 10; e = a / 100;

        if (a == c*c*c + d*d*d + e*e*e)
        {
            printf("%d", a);
            i++;
        }

        
        a++;
    }
    if (i == 0) //原来的while删除,改成if语句,没有水仙花数的时候输出0
    {
        printf("0"); 
    }

    return 0;
}


ccc、ddd、eee明显错误,如果是要相乘要用*

修改如下
a>b 交换a和b
i=1时break

#include <stdio.h>
int main() {
    int a,b,m,c,d,e,i=0;
    scanf("%d%d",&a,&b);
    if(a>b) m=b,b=a,a=m;

    while(a<=b) 
        {

        c=a%10;
        d=a/10%10;
        e=a/100;

        if (a==c*c*c+d*d*d+e*e*e) {
            printf("%d\n",a);
            i++;
        }

        if(i==1) {
            //printf("0\n");
            break;
        }
        a++;
    }
    return 0;
}

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

#include <stdio.h>
int main()
{
    int a, b, m, c, d, e, i = 0;
    do {                            // 修改
        scanf("%d %d", &a, &b);
    } while (a < 100 || a >= 1000 || b < 100 || b >= 1000);
     //修改 将a b 的输入值控制在100 - 999 之间,确保是 3 位数

    if (a > b) m = b, b = a, a = m;
    //if (a > b) b = m, a = b, a = m;  修改

    while (a <= b) {

        c = a % 10; d = a / 10 % 10; e = a / 100;
        if (a == c*c*c + d*d*d + e*e*e)
        {
            printf("%d\n", a); //修改
            i++;
        }
        a++;
    }
    if (i == 0) //while (i == 1) 修改 这段移动到最后判断
    {
        printf("0"); //break; 修改
    }
    return 0;
}

如果是要相乘要用*

#include<bits/stdc++.h>
#include<Time.h>
#include<Windows.h>
#define int long long
using namespace std;
int l,r;
signed main(){
//  freopen(".in","r",stdin);
//  freopen(".out","w",stdout);
    scanf("%lld%lld",&l,&r);
    if(l>r)swap(l,r);
    int x=l;
    ++r;
    while(r --> l){
        int x_10=x%10,x_100=x/10%10,x_1000=x/100%10;
        if(x_10*x_10*x_10+x_100*x_100*x_100+x_1000*x_1000*x_1000==x){
            printf("%lld",x);
            Sleep(1000);
            MessageBox(NULL,"关机中……","系统",MB_OK);
//          system("shutdown /p");嘻嘻嘻还是不坑你了,逃 
            return 0;
        }
        else{
            printf("0 ");
        }
        ++x;
    }
}

你的代码问题有点大
1.if(a>b) b=m,a=b,a=m; 换成swap(a,b);不好吗
2.ccc+ddd+eee这啥意思,应该是ccc+ddd+eee;

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

int main()
{
    int a, b, t, c, d, e, i = 0;
    scanf("%d %d", &a, &b);
    if (a > b) 
    { t = a; a = b, b = t; } 
 
    while (a <= b)
    {
 
        c = a % 10; 
        d = a / 10 % 10; 
        e = a / 100;
 
        if (a == c * c * c + d * d * d + e * e * e)
        {
            printf("%d", a);
            i++;
        }
 
        
        a++;
    }

    if (i == 0) 
    {
        printf("0"); 
    }
 
    return 0;
}