int main(){
int x;
int sum;
printf("Enter a positive integer: ");
scanf("%d", &x);
do{
sum += (x%10);
x=(x/10);
if((x/10)==0){
sum += x;
}
}
while((x/10)!=0);
printf("%d",sum);
}
嘿,我试图让这个在输入的整数中加上每个数字,但是我使用的代码会一直输出错误的输出。有人请帮我修改我的等式/代码,因为我不确定为什么输出不正确。
答案 0 :(得分:6)
代码
int sum;
未初始化。使用像
这样的东西int sum = 0;
注意:局部变量不会自动初始化[0
或其他任何东西],如果没有显式初始化,它们的内容将是垃圾。因此,使用sum += (x%10);
将导致读取前写场景,从而产生错误的结果。
答案 1 :(得分:4)
这是一个小数学问题:
有人给了你十个苹果,然后别人给了你两个苹果。你有几个苹果?
正确的答案是这个问题无法回答,因为没有人告诉你一开始就有多少苹果。
您的程序遇到了同样的问题:在开始添加sum
之前未能初始化int sum = 0;
,因此它有初始"垃圾"值。
将声明更改为
{{1}}
将解决问题。
答案 2 :(得分:0)
初始化变量sum
-
int sum = 0;
如果您未使用C
和其他语言初始化变量,则首次在表达式中使用时,会为其分配垃圾/随机值。
答案 3 :(得分:0)
迟到的答案
由于您已经发现代码存在问题,我想提供一个更简洁的替代方案:
int x;
int sum = 0
int digit;
printf("Enter a positive integer: ");
scanf("%d", &x);
while (x > 0) {
digit = x % 10;
sum += digit;
x /= 10;
}
printf("%d", sum);
x % 10
提取数字的最后一位,然后x /= 10
通过删除最后一位数来截断整数。