【发布时间】:2014-10-13 21:45:27
【问题描述】:
void print(int num, int digits)
{
double mod, divi;
int mod1, divi1;
mod = pow(10, digits);
divi = pow(10, digits-1);
mod1 = (int)mod;
divi1 = (int)divi;
if(digits > 0)
{
printf("%d\n", ((num%mod1)/divi1));
digits--;
print(num, digits);
}
else
{
return;
}
}
此函数旨在垂直打印来自num 的数字,但是当我运行它时,它打印的唯一内容是 0。我知道它得到了正确的位数,因为它打印的零数与数字中的位数相同,所以我在这里使用模数或除法一定有问题,我似乎找不到它。任何帮助将不胜感激!
获取数字的函数(可能问题出在这里?):
void getNum()
{
int num, digits=0;
printf("Enter a number to be printed vertically: ");
scanf("%d", &num);
if(num < 0)
{
digits = 1;
}
while(num)
{
num = num/10; //Here was the problem. Num was 0 once i passed it to print()
digits++; //Simply added a new variable to fix it. Thanks all!
}
print(num, digits);
}
【问题讨论】:
-
为我工作。你的意见是什么?
-
pow()可能会返回一个低于预期整数值的值。最好在截断为int之前对结果进行舍入round(pow(10,digits));。一定要先#include <math.h> -
我只输入任意长度的随机数,总是得到全 0,与位数相同。
-
也许我刚刚添加的函数是错误所在。 (获取数字)
-
好吧,看着它我意识到我是多么愚蠢。在将 num 传递给函数之前,我将其设置为等于 0。抱歉!
标签: c integer-division