标题: 我不理解我这个C语言代码为什么输不出,应该怎么改? [打印本页]

作者: 续我心弦    时间: 2021-10-20 22:28
标题: 我不理解我这个C语言代码为什么输不出,应该怎么改?
#include<stdio.h>
int main()
{
int i=10000,a,b=0,c;
for(i=10000;i<=100000;i++)
{
        a=i;
        while(i!=0)
        {
                c=i%10;
      b=b*10+c;
          i/=10;
        }
if(a==b)
                printf("%d\n",a);
}
}



作者: jhz931920    时间: 2021-10-21 07:46
i 的最小值是10000,i++,所以i永远不会等于零,所以一直在while内死循环,所以没有输出
作者: 天涯仗剑    时间: 2021-10-21 09:24
矛盾了,for(i=10000;i>=0;i--)
作者: xstong    时间: 2021-10-21 09:30
while循环内,你修改了i的值,只有i==0才能跳出。除了第一次for循环每次进入while循环时始终i==1,a ==b 始终不能成立!
作者: 天ノ忆    时间: 2021-10-21 10:31
我添加了代码即时打印各个参数的值,i在取余10之后经过while循环出来成了0,接着i+1,C等于i,这样走i就会一直等于0,a和C的值在i+1之后一直是1,B是无限增大的,最高位一直是1,又因为是int,所以最后成了负数,ab永远不可能相等,而且因为i的值一直在0和1直接变化,走不出这个for循环

51hei截图_20211021101459.png (56.77 KB, 下载次数: 55)

51hei截图_20211021101459.png

作者: 天ノ忆    时间: 2021-10-21 10:32
我添加了代码即时打印各个参数的值,i在取余10之后经过while循环出来成了0,接着i+1,C等于i,这样走i就会一直等于0,a和C的值在i+1之后一直是1,B是无限增大的,最高位一直是1,又因为是int,所以最后成了负数,ab永远不可能相等,而且因为i的值一直在0和1走不出这个for循环

51hei截图_20211021100352.png (58.84 KB, 下载次数: 70)

51hei截图_20211021100352.png

51hei截图_20211021101459.png (56.77 KB, 下载次数: 69)

51hei截图_20211021101459.png

作者: longfengjushi    时间: 2021-10-31 17:32

#include<stdio.h>
int main()
{
    int i=10000,a,b=0,c;
    int co = 0;
    for(i=10000;i<=100000;i++)
    {
       // printf("%d\n", i);
        a=i; //a=10000
        while(i!=0)
        {
            c=i%10;   //i=10000,c=
            b=b*10+c; //b=0
            i/=10;
            //while中 i的变化 10000->1000->100->10->1->0 结束循环 此时a=10000 b=1 c=1 i=0 a==b不成立
            //for循环继续 但是此时i=1 经过while后 a=1 c=1 b=2 i=0 由此可见i每次都会回到0,然后a=1,但是b是一个累加的过程,
            //所以a==b永不成立,而且i<=100000恒成立,陷入死循环,所以无输出
        }
        if(a==b)
            printf("%d\n",a);
    }
}


作者: 续我心弦    时间: 2021-11-3 21:52
jhz931920 发表于 2021-10-21 07:46
i 的最小值是10000,i++,所以i永远不会等于零,所以一直在while内死循环,所以没有输出

知道了

作者: 续我心弦    时间: 2021-11-3 21:53
谢谢各位





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1