Этот код дает сбой случайным образом, правильно идентифицируя одни числовые палиндромы и сбой на других.
#include <stdio.h>
int main(int argc, char *argv[])
{
int n, reverse = 0, temp;
printf("Enter a number to check if it is a palindrome or not\n");
scanf("%d",&n);
temp = n;
while( temp != 0 )
{
reverse = reverse * 10;
reverse = reverse + temp%10;
temp = temp/10;
}
if ( n == reverse )
printf("%d is a palindrome number.\n", n);
else
printf("%d is not a palindrome number.\n", n);
return 0;
}
Например, приведенный выше код неправильно говорит, что «87678» не является числовым палиндромом.
Проверка возврата scanf()
показывает, что это удалось, и печать значения n
верна для ввода 87678.
Однако код правильно говорит, что «4554» - это палиндром.
Однако, добавив:
n = reverse = temp = 0;
до первого printf()
программа все время работает корректно. Так что же происходит в первой версии? Это какое-то неопределенное поведение, когда переменные не инициализируются перед использованием?
РЕДАКТИРОВАТЬ: позже будет предоставлена сборка скомпилированной версии, которая не видит, что делает компилятор.
scanf
? - person Daniel Fischer   schedule 29.10.2012%
, на эту:reverse = reverse + (temp - 10 * (temp / 10));
- person Nikos C.   schedule 29.10.2012printf()
переменнаяreverse
после завершения циклаwhile
). - person Nikos C.   schedule 29.10.2012