求助:C语言函数实现质数/阿姆斯特朗数检测代码无报错但无法运行
问题排查与修复
核心问题分析
- 重复读取输入导致程序卡顿:
arm函数已经通过参数接收了主函数传入的数值,但函数内部又调用scanf("%d",&n);再次读取输入,这会让程序等待用户第二次输入,看起来像“无法正常运行”。 - 浮点数精度问题:使用
pow函数计算幂次时,返回的double类型值可能存在精度误差(比如pow(3,3)可能得到26.9999999),强制转换为int后会丢失精度,导致阿姆斯特朗数判断错误。 - 质数检测功能未实现:代码中仅标注了
//for prime numbers注释,但没有任何质数检测的逻辑代码。
修复后的完整代码
#include<stdio.h> // 计算整数幂,避免浮点数精度问题 int power(int base, int exp) { int result = 1; for(int i=0; i<exp; i++){ result *= base; } return result; } // 阿姆斯特朗数检测函数 void checkArmstrong(int n) { int var, rem, sum=0, count=0; var = n; // 统计数字的位数 while(var != 0) { var /= 10; count++; } var = n; // 计算各位数字的幂次和 while(var > 0) { rem = var % 10; sum += power(rem, count); var /= 10; } if(sum == n) printf("%d is an armstrong number\n", n); else printf("%d is not an armstrong number\n", n); } // 质数检测函数 void checkPrime(int n) { if(n <= 1) { printf("%d is not a prime number\n", n); return; } int isPrime = 1; for(int i=2; i*i <=n; i++){ if(n % i == 0){ isPrime = 0; break; } } if(isPrime) printf("%d is a prime number\n", n); else printf("%d is not a prime number\n", n); } int main() { int x; printf("Enter the number you desire: "); scanf("%d", &x); // 调用两个检测函数 checkPrime(x); checkArmstrong(x); return 0; }
修复说明
- 移除
arm函数内部的scanf调用,直接使用传入的参数值。 - 自定义
power函数实现整数幂运算,避免pow的浮点数精度问题。 - 补充完整的质数检测函数
checkPrime,实现质数判断逻辑。 - 主函数中同时调用质数和阿姆斯特朗数的检测函数,满足需求。
内容的提问来源于stack exchange,提问作者the learner
相关产品推荐
相关产品推荐

