这是查找3位阿姆斯特朗数的代码。但是当我输入字符串或任何其他特殊字符时,它会将其归类为阿姆斯特朗数,而实际上应该是相反的。
#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");
}
}
3条答案
按热度按时间qlzsbp2j1#
您需要检查
scanf
的结果-它将返回成功转换和分配的项数。像
nnnniii
这样的输入不是有效整数,因此读取失败,a
* 未更新 *。虽然
auto
变量的初始值是 indeterminate,但a
的初始值可能是0
,因此您的测试意外通过。w46czmvw2#
这是未定义的行为,因为您使用了未初始化的变量
a
。您应该检查输入是否不正确:
au9on6nz3#
当你得到值时,你需要检查它是否是数字。