c - 加法持久性和加法根程序在输入数字后无响应
问题描述
我的初学者 C 编程课有一个家庭作业:
加法持久性是整数位数之和的属性。找到数字的总和,然后对总和进行数字的总和,重复直到达到单个整数数字。这种循环的数量是该整数的加法持久性。考虑以下示例:
● 起始整数为 1234
● 其位数为 1+2+3+4 = 10
● 整数现在是 10
● 其数字之和为 1 + 0 = 1
● 整数为1。当值达到个位数时,我们就完成了。这个最后的整数是加法根
循环次数是附加持久性。整数 1234 的加法持久性为 2(第一个和为 10,然后第二个和为 1)。达到的最后一位称为整数的加法数字根。1234 的加法数字根是 1。编写一个程序:
● 向用户询问一个正整数。
● 如果给定整数是一位数,则将其加法持久性和乘法持久性报告为0,并将其加法根报告为自身。
● 如果整数小于0,则表示退出程序。
● 否则,求给定整数的加性持久性和加性根,并将结果报告给用户
● 继续提示用户直到他们退出
这是我想出的代码:
#include <stdio.h>
int main()
{
int num;
int pers = 0;
int res = 0;
int sig = 0;
int sum = 0;
int sum1 = 0;
for (sig = 0;sig >= 0;) {
printf("Please enter a positive integer to find the additive persistence, and the integer's additive digital root: ");
scanf_s("%d", &num);
if (num < 0) {
sig--;
break;
}
res = num;
sum = 0;
while((res>0)){
sum = sum + (res % 10);
res = num / 10;
if (res == 0) {
if (sum >= 10) {
res = sum;
sum = 0;
}
if (sum < 10)
pers++;
}
}
printf("\nThe additive persistence is %d and the additive root is %d\n", pers, sum);
}
return 0;
}
每当我(成功)编译并运行代码时,在 scanf 语句之后,程序什么也不做。为什么会这样?对于成功完成这项任务有什么建议吗?非常感谢你的帮助
解决方案
考虑这一行:
res = num / 10;
res
第一次运行循环后的值是多少?在第二次运行之后?如果你在那里打印来调试你的程序,你会看到它res
总是具有相同的值并且不会改变。这是一个无限循环,可能会一直持续到sum
溢出时出现未定义的行为。你可能想要这个:
res = res / 10;
推荐阅读
- node.js - 如何获取nodejs readline的进度或任何其他逐行读取大文件的方式?
- zsh - macOS:iTerm2:重复:“npx:--shell-auto-fallback 已删除”
- c# - 如何在 Azure VM 服务器的后端运行 VB.NET exe?
- css - MaterialUI 按钮无法覆盖样式
- wordpress - Woocommerce 在多供应商订单中获取子订单号
- angular - 如何将 HighChart 添加到 Angular?
- python - 通过 OpenCV 应用分割掩码
- mysql - Clickhouse 按顺序时间和特定类型查找事件对
- lightningchart - 为散点图设置单个大小的大小
- javascript - 等待调用后,它不会执行下一行