为什么即使没有错误我也没有得到想要的输出?

时间:2019-09-02 09:10:00

标签: c

程序查找输入的数字后的下一个回文

编译时,仅要求输入值的第一部分进行编译。之后什么也没发生

#include<stdio.h>

void main()
{
    int n,revNum = 0,remainder,d,revD = 0;

    printf("Enter an non palindromic number:");
    scanf("%d",&n);

    d = n;

    while (d != revD)
    {
         n += 1;
         d = n;

          while (n != 0)
          {
            remainder = n%10;
            revNum = (revNum * 10) + remainder;
            n = n/10;
          }
         n = d;
         revD = revNum;    
    }
    printf("\nThe nearest palindrome is %d",d);
}

我解决问题的方式有问题吗?

2 个答案:

答案 0 :(得分:0)

在循环中放入printf,您会发现逻辑不好。例如,在第一个循环中添加一个printf("show");

答案 1 :(得分:0)

您忘记了在外部循环中将revNum重新初始化为0。 当然,正如其他答案已经指出的那样,该问题与逻辑错误有关。这就是为什么编译器根本不抱怨的原因。 例如,我通过在内圈内添加打印来弄清楚。经过一些测试,我发现它与palindrom数字的直接前辈(例如43、98、100)一起使用时效果很好,但与其他数字有所不同。通过打印内部变量,我了解了revNum的用途,并且应该在外部while循环的每次迭代中将其重新初始化。

...
while (d != revD)
{
     n += 1;
     d = n;
     revNum = 0; //ADD THIS

     while (n != 0)
     {
        ...
     }
}
...