此代码通过正确识别一些数字回文并在其他回文上失败而随机失败。
#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()
程序似乎一直正常工作之前。那么第一个版本发生了什么?当变量在使用前未初始化时,这是某种未定义的行为吗?
编辑:稍后将提供无法查看编译器在做什么的编译版本的程序集。