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。我知道它能得到正确的数字位数,因为它打印出的零位数与数字中的位数相同,因此我在此处使用Modulo或Division一定有问题,而且我似乎不太可能找到它。任何帮助将不胜感激,谢谢!
获取数字的功能(也许问题在这里?):
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);
}
我看不到您的代码有什么问题,除了它太复杂并且不必要使用浮点数学。
这里是替代方法:
void print(int num, int digits)
{
if (digits > 0) {
print(num / 10, digits - 1);
printf("%d\n", num % 10);
}
}
技巧是移动打印after递归调用。这允许更简单的逻辑。
这是解决我的问题的方法。在将num
设置为0
之前,将其传递给函数。我只是声明了另一个变量num1
在while循环中使用,而不是传递给函数的实际num
。
[代码] >>
void getNum()
{
int num, num1, digits=0;
//get the num
printf("Enter a number to be printed vertically: ");
scanf("%d", &num);
num1 = num;
//Loop to find how many digits are in the number
while(num1)
{
num1 = num1/10;
digits++;
}
//call function to print
print(num, digits);
}
在NPE answer上几乎没有变化,我到达的代码版本消除了digits
参数并适用于负数。