【发布时间】:2016-09-25 22:35:19
【问题描述】:
我正在学习如何用 c 编程:
我想创建一个将数字分隔为数字的程序,从那里我想将它们存储到一个数组中(我已经在下面的代码中完成了)。从那里我需要使用数字打印出数字来帮助生成相同的数字。程序在运行时崩溃了,我不知道为什么。
#include <stdio.h>
int power(int a, int b);
int main()
{
//Issue: printing out incorrect numbers
//Fix: Recall that c is treated as a character here when getchar is invoked
#define MAX_SIZE 100
const int TEN = 10;
const int ONE = 1;
int c;
int digitPos, digitHolder, numberPower = 0;
int my_strg[MAX_SIZE];
printf("\n");
while (((c = getchar()) != EOF) && (c != '\n'))
{
my_strg[digitPos] = c - '0';
digitPos = digitPos + ONE;
}
while (digitPos >= 0)
{
int toPower = digitPos - 1;
printf("%10d", power(TEN, toPower));
digitPos = digitPos - 1;
}
return 0;
}
int power(int a, int b)
{
if (b == 0)
{
return 1;
}
else
{
return a * power(a, b - 1);
}
}
目前输出的是返回输入数字所需的幂,但打印后程序崩溃。有人可以指导我如何解决这个问题吗?
【问题讨论】:
-
尝试初始化
digitPos。例如:int digitPos = 0 -
和
while (digitPos >= 0)-->while (digitPos > 0) -
@BLUEPIXY 因为我无法重新创建 OP 的堆栈粉碎(这就是我监督实际问题的原因。我希望 ;-))我试图找出原因,似乎 GCC(这里是 4.9)能够使用
-O2及更高版本将其优化为尾递归。这与 GCC 的 wrap-around signed int 溢出一起使它工作,但是,是的,它仍然是未定义的行为,当然。 -
在将第二个“while”循环更改为“for”循环后,我能够修复它