我有一个功课要求我们制作用户输入的(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));
//}
}
所以这是我的工作进度代码。 我甚至不知道我是否有可能感谢任何帮助。 提前谢谢。
答案 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(标准模板库)中有很多功能,如列表,向量...... ,这些工作支持动态内存分配非常合理。
如果您发现任何问题需要掌握这个概念,请告诉我。谢谢。