C语言 为什么当我输入字符串时,它告诉我它是一个阿姆斯特朗数?

iaqfqrcu  于 2023-02-21  发布在  其他
关注(0)|答案(3)|浏览(148)


这是查找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");
  }

}
qlzsbp2j

qlzsbp2j1#

您需要检查scanf的结果-它将返回成功转换和分配的项数。

if ( scanf( "%d", &a ) != 1 )
  // bad input
else
  // check if a is an armstrong #

nnnniii这样的输入不是有效整数,因此读取失败,a * 未更新 *。
虽然auto变量的初始值是 indeterminate,但a的初始值可能是0,因此您的测试意外通过。

w46czmvw

w46czmvw2#

这是未定义的行为,因为您使用了未初始化的变量a
您应该检查输入是否不正确:

if(scanf("%d", &a) != 1)
  {
    printf("Invalid input\n");
    return 1;
  }
au9on6nz

au9on6nz3#

#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");
  }

}

当你得到值时,你需要检查它是否是数字。

相关问题