C ++中的项目崩溃了,不确定为什么

时间:2017-05-22 13:42:33

标签: c++

当我开始与程序交互时,我经常崩溃。也许我的算法效率低下或其他什么因为我对编码的东西还很新,但我没有看到内存的突然上升或任何正常崩溃原因。

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

int a, b, c, d, e, f, g, h, i, j, k, l;
main()
{
    printf("    Minecraft Distance Calculator   \n");
    printf("1. 2D Distance Calculation\n");
    printf("2. 3D Distance Calculation\n");
    printf("3. Y-Axis calculation (for mob farms)\n");
    printf("Lower than 1 or higher than 3 will terminate the program!\n");
    printf("#");
    scanf("%d", j);
    if (j=1)
    {
        printf("Starting X:\n");
        scanf("%d", a);
        printf("Starting Z:\n");
        scanf("%d", c);
        printf("Destination X:\n");
        scanf("%d", d);
        printf("Destination Z:\n");
        scanf("%d", f);
        k = sqrt(pow(a-d, 2) + pow(c-f ,2));
        printf("Distance in 2D: %d", k);
        getch();
    }
    else if (j=2)
    {
        printf("Starting X:\n");
        scanf("%d", a);
        printf("Starting Y:\n");
        scanf("%d", b);
        printf("Starting Z:\n");
        scanf("%d", c);
        printf("Destination X:\n");
        scanf("%d", d);
        printf("Destination Y:\n");
        scanf("%d", e);
        printf("Destination Z:\n");
        scanf("%d", f);
        l = sqrt(pow(a-d, 2) + pow(b-e, 2)+ pow(c-f ,2));
        printf("Distance in 3D: %d", k);
        getch();
    }
    else if (j=3)
    {
        printf("To be coming...");

    }
    else
    {
        printf("i warned you. just hit enter to stop it.");
        getch();
        return 0;
    }
}

该计划为here

如果我有一些错误,请忘记我的英语不好。

1 个答案:

答案 0 :(得分:0)

您的问题是您误用了scanf。这是代码的代表性部分:

int j;
/* snip */
scanf("%d", j);

如果您阅读scanf文档,您会发现它基本上将指针作为参数,而不是值。通过传入int代替,你基本上告诉scanf从输入中获取一些数据并将其写入某个随机位置(可能是字节0)的内存中。这个记忆不可避免地受到保护,因此你会立即崩溃。

你想这样做:

scanf("%d", &j);

这传递了j的地址,一个指针,scanf正确地将它从输入读取的数据写入该地址,然后可以正常地从j读取

阅读文档,阅读一些教程,不要将C与C ++混淆。