0

我正在尝试在这里做作业,正在编写一个程序,该程序显示一定数量的点到 (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 值。然后程序应该给出一个表格,显示点和到 (0,0) 的距离。必须创建/使用以下函数: “point getpoint()” - 要求输入坐标 “void printpoint(point p)” - 打印点的坐标 “double distanceToO(point p)” - 返回distance to (0,0) 创建一个结构点,它有两个成员,一个点的 x 坐标和 y 坐标。

有人可以提示我出了什么问题吗?

4

4 回答 4

5
int number, i;
struct point coord[number];

number尚未初始化,您正在使用它来声明coord数组的大小。您将在堆栈上生成一个有效随机大小的数组,这很可能会导致崩溃。

于 2013-03-06T13:43:37.250 回答
2

number当用于指定数组中元素的数量时,该变量未初始化coord。然后访问该数组,并且不知道它们的数组中有多少元素。number在使用之前读取一个有效值并检查是否确实已读取了一个有效值:

/* scanf() returns number of assignments made. */
if (scanf("%d", &number) == 1)
{
}

始终检查输入操作的结果,以确保后续代码正在处理具有有效值的变量。

于 2013-03-06T13:43:34.300 回答
1
int number;
struct point coord[number];

我看不到在哪里number初始化。如果你真的想使用 VLA,你应该在coord事后声明:

int number;

scanf("%d", &number);

struct point coord[number];

否则,由于 number具有自动存储期限,其值将是未定义的。

于 2013-03-06T13:43:47.677 回答
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
于 2013-03-06T13:44:41.903 回答