我正在尝试做我的作业,这是写一个程序,它显示了一定数量点的距离(0,0)。但是出于某些原因,我的程序启动后,Windows表示它已停止工作。我尝试了两个不同的编译器,他们没有给我任何错误信息。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct point {
int x;
int y;
};
struct point getPoint();
void printPoint(struct point);
double distanceToO(struct point p);
void createArray(struct point, int);
int main() {
int number, i;
struct point coord[number];
printf("Type the number of points you want to create: ");
scanf("%d", &number);
printf("\n\n");
for(i=0;i<number;i++)
coord[i]=getPoint();
printf("\n\t\tPoint\tDistance to (0,0)\n");
for(i=0;i<number;i++) {
printPoint(coord[i]);
printf("\t%0.2lf", distanceToO(coord[i]));
}
system("pause");
return 0;
}
struct point getPoint() {
struct point p;
printf("Type the x and the y-value for a point with a space in between: ");
scanf("%d %d", &p.x, &p.y);
return p;
}
void printPoint(struct point p){
printf("\n\t\t(%d,%d)",p.x,p.y);
}
double distanceToO(struct point p) {
return sqrt((0-p.x)*(0-p.x)+(0-p.y)*(0-p.y));
}
这就是要做的事情:
编写一个程序,首先询问应该创建多少个点,然后询问用户这些点的x和y值。 然后程序应该给出一个表,显示Point和到(0,0)的距离。 必须创建/使用以下函数: “point getpoint()” - 要求输入坐标 “void printpoint(point p)” - 打印点的坐标 “double distanceToO(point p)” - 返回距离(0,0) 创建一个结构点,它有两个成员,一个点的x坐标和y坐标。
有人可以给我一些关于错误的提示吗?
答案 0 :(得分:5)
int number, i;
struct point coord[number];
number
尚未初始化,您正在使用它来声明coord
数组的大小。您将在堆栈上生成一个有效随机大小的数组,这可能会导致崩溃。
答案 1 :(得分:2)
当用于指定数组number
中的元素数时,变量coord
未初始化。然后访问该数组,并且不知道它们的数组中有多少个元素。在使用之前将有效值读入number
并检查是否确实已读取有效值 :
/* scanf() returns number of assignments made. */
if (scanf("%d", &number) == 1)
{
}
始终检查输入操作的结果,以确保后续代码正在处理具有有效值的变量。
答案 2 :(得分:1)
int number;
struct point coord[number];
我不知道number
初始化的位置。如果您确实想要使用VLA,则应在之后声明coord
:
int number;
scanf("%d", &number);
struct point coord[number];
否则,由于number
具有自动存储持续时间,因此其值将是未定义的。
答案 3 :(得分:1)
我很惊讶你没有收到警告/错误:
int number, i;
struct point coord[number];
您分配一个struct point
数组,其大小等于一个整数变量。
请注意,如果您使用Visual Studio,它也不完全支持C99标准,因此不允许在声明之前声明语句,如:
int number;
number = some_number;
struct point coord; // Error, you have a statement above