2015-03-24 3 views
3

Я написал программу для проверки номера Palindrome.Сравнение номеров в 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); 
    } 

Но он всегда показывает «Число не является палиндром», независимо от числа, не является палиндром или нет.

ответ

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/

+1

Пара незначительных улучшений: (1) проверьте, что 'scanf()' возвращено 1; (2) неплохо напечатать входное значение, а также выходное значение -'printf («Число% d - это палиндром (обратный:% d) \ n", n, i); 'и' printf («Число% d не является палиндром, потому что в качестве примера оно обращается в сторону \ n", n, i). Эховые входы, в частности, помогают обнаружить, что входной номер был уничтожен исходной версией 'reverse()' (той, что в вопросе). –

+0

@JonathanLeffler спасибо, я включил ваши предложения в код. –

+0

Благодарим за внесение изменений. Я не могу дать второе голосование - извините. –

Смежные вопросы