C写入指针数组?

时间:2017-03-12 09:46:00

标签: c arrays pointers

我有一个功课要求我们制作用户输入的(x,y)坐标数组,但我们不知道输入了多少个,它将在输入(0,0)时结束,最后一个不会被添加到数组然后我们对它们进行排序并打印它们。所以我使用指针来制作数组,但是我不能插入我要插入的所有元素它只能识别最后输入的元素。当我尝试打印它们时,它将只打印我输入正确的最后一个,其他大部分来自(0,0)或一些随机数。

int main()
{
  int x,y,*xp,*yp;
  int a = 0,s,m=12;

  etiket:
  scanf("%d %d",&x,&y);

  printf("\n");
  while (x != 0 || y != 0)
    {   
    a=a+1;
    xp = (int*) malloc(sizeof(int)*m);
    yp = (int*) malloc(sizeof(int)*m);

    //printf("%d %d\n",x,y);
    if( a%10==0)
      {
        xp = (int*) realloc(xp,sizeof(int)*m+10);
        yp = (int*) realloc(yp,sizeof(int)*m+10);
      }
  xp[a]=x;
  yp[a]=y;

  printf("%d %d\n",*(xp+a),*(yp+a));
  goto etiket;


//SortPoints((xp+a),(yp+a),a);
}
//printf("siralama:\n");
//for(s=0; s<=a; s++)
//{
//  printf("%d %d\n",*(xp+s),*(yp+s));

//}
}

所以这是我的工作进度代码。 我甚至不知道我是否有可能感谢任何帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

由于您被限制使用C,因此使用结构来为数组动态分配内存会更容易。这是代码: -

#include<stdio.h>
#include<malloc.h>

#define SIZE 20  // SIZE OF YOUR ARRAY FOR DYNAMIC MEMORY ALLOCATION

typedef struct  {
              int x;
              int y;     // That's the point with x and y coordinate

    } point ;   // Similar as int n, float a .... now point is a 
                         // type which holds the value of x and y

int main(void){

       point *p;    // pointer decleration for point type

       p= (point *)malloc(SIZE* sizeof(point)); // Memory Allocation

       int i=0;

       do{
             p++;  // increment of pointer

             i++;

             printf("Enter values for point %d: (x,y)= ",i);    

             scanf("%d", &p->x);     // input x and y 
             scanf("%d", &p->y);

       }while((p->x) !=0 || (p->y) !=0 ); // loop breaks when inputs 0,0


   p--;    // decrement pointer as 0,0 value will have no use
   i--;

   printf("\n\n\n");

   for(;i>0;i--,p--)    
          printf("Point %d: (x,y)=(%d,%d)\n", i,p->x, p->y); 
                                   // displaying point values user given

   printf("\n\n\n");


 return 0;
}

此处 p 包含点数的孔数组。现在,为了排序你只需要在函数中传递p作为类似的agrument并在正文中编写常规排序算法。

  point* SortingArray(point *p)

此函数将返回另一个已排序的点数组。希望你自己能做到这一点。

此外,可能很快你将学习C ++,这种作品在课堂上很容易使用。事实上,在C ++中, STL(标准模板库)中有很多功能,如列表,向量...... ,这些工作支持动态内存分配非常合理。

如果您发现任何问题需要掌握这个概念,请告诉我。谢谢。