当我开始与程序交互时,我经常崩溃。也许我的算法效率低下或其他什么因为我对编码的东西还很新,但我没有看到内存的突然上升或任何正常崩溃原因。
#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
如果我有一些错误,请忘记我的英语不好。
答案 0 :(得分:0)
您的问题是您误用了scanf
。这是代码的代表性部分:
int j;
/* snip */
scanf("%d", j);
如果您阅读scanf
文档,您会发现它基本上将指针作为参数,而不是值。通过传入int
代替,你基本上告诉scanf
从输入中获取一些数据并将其写入某个随机位置(可能是字节0)的内存中。这个记忆不可避免地受到保护,因此你会立即崩溃。
你想这样做:
scanf("%d", &j);
这传递了j
的地址,一个指针,scanf
正确地将它从输入读取的数据写入该地址,然后可以正常地从j
读取
阅读文档,阅读一些教程,不要将C与C ++混淆。