为什么当我输入字符串时它告诉我它是阿姆斯特朗数?

问题描述 投票:0回答:3

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

}
c digits
3个回答
0
投票

这是未定义的行为,因为您使用未初始化的变量 a.

您应该已经检查了错误的输入:

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

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

}

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


0
投票

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

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

nnnniii 这样的输入不是有效整数,因此读取失败并且 a 未更新.

虽然 auto 变量的初始值是 indeterminate,但 a 的初始值可能是 0,所以你的测试是偶然通过的。

© www.soinside.com 2019 - 2024. All rights reserved.