这是用于查找 3 位数阿姆斯壮数的代码。但是当我输入字符串或任何其他特殊字符时,它会将其归类为 armstrong 数字,而它应该是其他方式。
#include <stdio.h>
#include <stdlib.h>
int main() {
int a, original, rev, rem;
printf("Enter the number : \n");
scanf("%d", & a);
original = a;
rev = 0;
while (a != 0) {
rem = a % 10;
rev = rev + (rem * rem * rem);
a /= 10;
}
if (rev == original) {
printf("Its an Armstrong number\n");
} else {
printf("Its not an Armstrong number \n");
}
}
这是未定义的行为,因为您使用未初始化的变量 a
.
您应该已经检查了错误的输入:
if(scanf("%d", &a) != 1)
{
printf("Invalid input\n");
return 1;
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int a, original, rev, rem;
printf("Enter the number : \n");
if(scanf("%d", &a) != 1)
{
printf("This is not number\n");
return 1;
}
original = a;
rev = 0;
while (a != 0) {
rem = a % 10;
rev = rev + (rem * rem * rem);
a /= 10;
}
if (rev == original) {
printf("Its an Armstrong number\n");
} else {
printf("Its not an Armstrong number \n");
}
}
当你得到值时,你需要检查它是否是数字。
您需要检查 scanf
的结果 - 它会返回成功转换和分配的项目数。
if ( scanf( "%d", &a ) != 1 )
// bad input
else
// check if a is an armstrong #
像 nnnniii
这样的输入不是有效整数,因此读取失败并且 a
未更新.
虽然 auto
变量的初始值是 indeterminate,但 a
的初始值可能是 0
,所以你的测试是偶然通过的。