C中的数字比较给出了错误的结果

时间:2015-03-24 02:54:41

标签: c

我写了一个程序来检查回文数。

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
    main()
    {
        int n,i;
        printf("Please enter a number: ");
        scanf("%d", &n);
        /* Function Prototypes */
        int reverse(int *p);
        i=reverse(&n);
        printf("Number returned %d",i);
        if (i == n) 
        {
            printf("The number is a palindrome");
        }
        else
        {
            printf("The number is NOT a palindrome");
        }

    }
    int reverse( int *p)
    {
        int rev=0;
        while(*p !=0)
        {
            rev=rev*10;
            rev=rev+ *p%10;
            *p=*p/10;
        }
        return (rev);
    }

但它始终显示&#34;数字不是回文&#34;无论数量多少都不是回文。

1 个答案:

答案 0 :(得分:5)

reverse函数使其参数指向零。该参数不需要是一个指针,并且通过值传递n而不是解决问题。

这里有固定的代码,有些重新格式化并添加了错误检查。

#include <stdio.h>

int reverse(int p) {
    int rev = 0;
    while (p != 0) {
        rev = rev * 10;
        rev = rev + p%10;
        p = p/10;
    }
    return rev;
}

int main(void) {
    int n, i;
    printf("Please enter a number: ");
    if (scanf("%d", &n) != 1) {
        printf("failed to read number.\n");
        return 1;
    }
    i = reverse(n);
    if (i == n) {
        printf("%d is a palindrome: reversing it gives %d\n", n, i);
    } else {
        printf("%d isn't a palindrome: reversing it gives %d\n", n, i);
    }
    return 0;
}

能够调试程序是一项重要技能。这是一些初学者技巧的良好链接:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/