确定,存储和打印给定范围内的所有整数

时间:2012-03-24 09:00:31

标签: c pointers

这就是我所做的:

#include <stdio.h>
#include <stdlib.h>

int betweenArray(int a, int b){
    int *arr,i,range;
    range = b - a + 1;
    arr = (int *)malloc(range*sizeof(int));
    for(i=0;i<range;i++){
        arr[i] = a++;
    }
return * arr;

int main (int argc, const char * argv[]) {
    int a,b,i;
    int range;

    printf("Give numbers: ");
    scanf("%d %d",&a,&b);
    range = b - a + 1;


    for(i=0;i<range;i++)
        printf("%d\n",betweenArray(a,b)); 
    return 0;
}

所以,当我运行这个并给出例如2和5作为参数时,我得到结果:2 2 2 2而不是2 3 4 5.我无法找到我犯错的地方。

4 个答案:

答案 0 :(得分:1)

此代码存在多个问题,这都是由于对指针的单一误解及其与C中数组的关系。

  • 您的betweenArray应该返回int*,而不是int
  • 因此,您不应在返回行<#li>上取消引用arr
  • 您应该拨打betweenArray一次并存储其结果,而不是在循环中调用
  • 您需要就free
  • 返回的结果致电betweenArray

答案 1 :(得分:1)

问题是你正在计算序列,但你只返回它的第一个数字。

betweenArray的返回值为int而不是int *,而您return * arr;代替return arr;。修好后,在main中,您需要执行以下操作:

int *sequence = betweenArray(a,b);
for (i=0;i<range;i++)
    printf("%d", sequence[i];

但是如果函数返回数组及其中的元素数量会更好,例如:

int *betweenArray(int a, int b, int *numElements){
    int *arr,i,range;
    range = b - a + 1;
    arr = (int *)malloc(range*sizeof(int));
    for(i=0;i<range;i++){
        arr[i] = a++;
    }
    if (numElements) {
        *numElements = range;
    }
    return arr;
}

int main (int argc, const char * argv[]) {
    int a,b,i;
    int *sequence;
    int range;

    printf("Give numbers: ");
    scanf("%d %d",&a,&b);

    sequence = betweenArray(a,b,&range);

    for(i=0;i<range;i++)
        printf("%d\n",sequence[i]);

    free(sequence); // Be nice, clean up.
    return 0;
}

答案 2 :(得分:0)

您正在使用相同的参数调用betweenArray(),这些参数对于通过for循环的不同运行不会更改 - 因此您将始终获得相同的结果。你必须使用索引调用betweenArray(),或者调用它一次并返回一个数组。

答案 3 :(得分:0)

你的函数返回数组的第一个元素,它与'a'相同。真的,我完全混淆了你想做的事情。用于betweenArray()的上下文是迭代器,这在C中是不可能的。

如果你想使用迭代器这样做,你应该使用三个函数:1)创建它(可能是分配结构和设置值),2)从它获得下一个值或结束标记,3)deinit和解除分配。

OTOH这对于'for'循环来说非常简单。