【发布时间】:2011-07-11 13:03:12
【问题描述】:
大家好,很抱歉打扰你们,但我开始在这里松懈了.. 我最近又开始用 C 编程了,我遇到了一些我无法弄清楚的错误。 我的 C 程序(应该)是一个简单的程序,所以它需要执行以下操作: 从键盘读取未定义数量的自然元素,直到读取到 0。之后,它必须计算所有元素的乘积并计算结果末尾的 0-s 的数量..
int input(int* v) {
int n = 0;
do
{
n = n + 1;
v = (int*) realloc(v,n*sizeof(int)); printf("Enter number %d: ",n); scanf("%d",&v[n-1]);
}
while(v[n-1] != 0);
n--;
return n; }
int tZeros(int* v, int eNb) {
int i;
int val = 1;
for(i = 0; i < eNb; i++)
{
val = val * v[i];
}
i=0;
while(val % 10 == 0)
{
i++;
}
return i; }
int main (int argc, char** argv) {
int* v = NULL;
int eNb = input(&(*v));
if(eNb>0)
{
int zeros = tZeros(v, eNb);
printf("The number of ending zeros in the product of the given numbers is: %d",zeros);
}
else
{
printf("No elements to do computations with!\n");
}
free(v);
return 0;
}
输入函数应该返回两件事:元素的数量和动态数组中的实际元素。但是在输入函数运行后,输入的值都丢失了。 我将参数作为指针传递给输入,所以它应该改变正确地址的值吗?
欢迎所有建议! 谢谢!
附:我认为问题出在我的数组 v.. 退出输入函数后,它会丢失所有值..
【问题讨论】:
-
SO 的 markdown 解析器有什么问题?
-
没有时间检查所有内容,但..
i=0; while(val % 10 == 0) { i++; }这将永远循环,而不是循环。 -
@Radek S:你指的是什么?
-
@Ed 一些代码没有突出显示并且字体错误。至少在我的 iPod touch 上。
-
对不起代码..可能是因为我只是复制粘贴它..
标签: c pointers memory-management dynamic-arrays