为什么我的程序没有提供正确的输出?

时间:2015-07-04 18:32:24

标签: c

逻辑错在哪里?我发现它不正确但输出它    给出的只是1.它应该给出所有阿姆斯壮的数字从1到500。

     #include<stdio.h>
     #include<conio.h>
     void main()
         {
         clrscr();
         int a,b,c=0 ,d,i=1;
         while(i<=500)
             {
             b=i;
             while(b>0)
                 {
                 a=b%10;
                 c=(a*a*a)+c;
                 b=b/10;
                 }
             if(c==i)
    `            printf("%d",i);
             i++;
             }
          getch();
          }  

2 个答案:

答案 0 :(得分:5)

您需要在内循环之前初始化c

 while(i<=500)
 {
     b=i;
     c=0;    /* reset 'c' */
     while(b>0)
     {
        a=b%10;
        c=(a*a*a)+c;
        b=b/10;
     }
}

您正在使用main()的非标准签名。请参阅:What should main() return in C and C++?

答案 1 :(得分:0)

如果您运行以下代码

你会明白为什么只有一个输出。

注意:正确声明main()

注意:使用常用功能而不是专有的conio.h

注意:使用简单的'for'语句而不是'while'和'i'的增量

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

int main()
{
    //clrscr();
    int a;
    int b;
    int c=0;
    int i=1;

    for( ; i<=500; i++ )
    {
        b=i;

        while(b>0)
        {
            a=b%10;
            c=(a*a*a)+c;
            b=b/10;
        }

        printf( "a=%d. b=%d, c=%d\n", a,b,c);
        if(c==i)
            printf("%d\n",i);
    } // end for

    //getch();
    getchar();
    return(0);
} // end function main