我有一个作业要求我做一个数学模型,这是我的主要功能的一部分,然而,当我运行它时,我总是很难扫描数字,我只需要有人帮我检查它。谢谢
P.S。如果有人输入3退出此菜单,我该怎么办?我认为使用exit(),但仍然无法正常工作。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int option =0;
double *x1, *x2,*y1, *y2, *x,*y;
double *slope;
display_menu();
scanf(" %d", &option);
if(option ==1)
{
printf("You choose to do the Two-point form. \n");
printf("Enter the x-y coordinates of the first point separate by a space=> ");
scanf("%lf","%lf", &x1,&y1);
printf("Enter the x-y coordinates of the second point separate by a space=> ");
scanf("%lf","%lf", &x2,&y2);
two_point_form(*x1,*y1,*x2,*y2); /* <<<--------this one is always wrong. T.T */
}
}
int two_point_form(double *x1, double *y1, double *x2, double *y2)
{
double slope, intecept;
printf("Two-point form: ");
printf(" (%lf-%lf)", *y2,*y1);
printf(" m = --------");
printf(" (%lf-%lf)", *x2-*x1);
slope = (*y2-*y1)/(*x2-*x1);
intecept = *y1-slope**x1;
printf("Slope-intecept form: y= %lfx+%lf", slope, intecept);
}
答案 0 :(得分:1)
您将指向指针的指针传递给scanf
。并解除引用x1
,y1
到two_point_form
等等,它们提供未定义的行为,因为它们从未被分配过。
当你正在使用option
时,将你的双打声称为'普通'双打,而不是指针:
double x1, y1, x2, y2, x, y;
然后将他们的地址传递给scanf
,将他们的值传递给two_point_form
:
two_point_form(x1, y1, x2, y2);
答案 1 :(得分:0)
下面:
double *x1, *x2,*y1, *y2, *x,*y;
...
scanf("%lf","%lf", &x1,&y1);
您正在设置指针,将指针的地址传递给scanf()
,但尝试将double
读入其中。第一行应该是:
double x1, x2, y1, y2, x, y;
答案 2 :(得分:0)
你可以创建double * x1
(指向double的指针),除非你没有初始化它。我还假设你想要double x1
,因为这是创建变量的东西,第一个只创建指向某个类型的变量的指针。
然后你调用scanf()
期望指向变量的指针,而不是给它一个你给它的指针&x1
,这是指向double的指针。下一次尝试。
最后一个是*x1
部分,它将未初始化的指针取消引用为double。
这是一个混乱,你应该(可能)做的是
double x1,x2...;
scanf("%lf...", &x1...);
two_point_form(&x1,...);
你应该做什么(绝对)做的就是获取一些C书并阅读指针章节。