#包括<;标准h>;
#包括<;stdlib.h>;
#包括<;数学h>;
int main()
{
int x1,x2,x3,
y1,y2,y3,
ystr1,ystr2,ystr3,
xstr1,xstr2,xstr3,
sstr1、sstr2、sstr3;
printf(“插入”);
扫描频率(“%d%d%d%d%d%d%d””,x1,y1,x2,y2,x3,y3);
ystr1=y2-y1;
xstr1=x2-x1;
sstr1=sqrt(pow(xstr1,2)+pow(ystr1,2));
ystr2=y3-y2;
xstr2=x3-x2;
sstr2=sqrt(pow(xstr2,2)+pow(ystr2,2));
ystr3=y3-y1;
xstr3=x3-x1;
sstr3=sqrt(pow(xstr1,2)+pow(ystr1,2));
printf(“打印%d、%d、%d”、sstr1、sstr2、sstr3”);
返回0;
}
由于某种原因,每次我输入一个位数时,此代码都会冻结。我真的不知道是什么原因造成的。是因为太多的INT吗
scanf函数需要指针作为参数,以便修改正在读取的变量。请记住,C中的所有参数都是通过值传递的。如果我们想用函数修改某些内容,我们需要在内存中传递它的地址(指针)
即使未启用显式警告,代码生成的警告也会使这一点变得明显
test.c:在函数“main”中:
test.c:14:13:警告:格式“%d”要求参数类型为“int*”,但参数2的类型为“int”[-Wformat=]
扫描频率(“%d%d%d%d%d%d%d””,x1,y1,x2,y2,x3,y3);
~^
test.c:14:15:警告:格式“%d”要求参数类型为“int*”,但参数3的类型为“int”[-Wformat=]
扫描频率(“%d%d%d%d%d%d%d””,x1,y1,x2,y2,x3,y3);
~^
test.c:14:17:警告:格式“%d”要求参数类型为“int*”,但参数4的类型为“int”[-Wformat=]
扫描频率(“%d%d%d%d%d%d%d””,x1,y1,x2,y2,x3,y3);
~^
test.c:14:19:警告:格式“%d”要求参数类型为“int*”,但参数5的类型为“int”[-Wformat=]
扫描频率(“%d%d%d%d%d%d%d””,x1,y1,x2,y2,x3,y3);
~^
test.c:14:21:警告:格式“%d”要求参数类型为“int*”,但参数6的类型为“int”[-Wformat=]
扫描频率(“%d%d%d%d%d%d%d””,x1,y1,x2,y2,x3,y3);
~^
test.c:14:23:警告:格式“%d”要求参数的类型为“int*”,但参数7的类型为“int”[-Wformat=]
扫描频率(“%d%d%d%d%d%d%d””,x1,y1,x2,y2,x3,y3);
因此,不是:
scanf(“d%d%d%d%d%d%d%d";,x1,y1,x2,y2,x3,y3”);
你会想写:
scanf(“d%d%d%d%d%d%d%d”、“x1”、“y1”、“x2”、“y2”、“x3”、“y3”);
&运算符返回变量的地址
还需要注意的是,scanf返回一个int值。此值表示读取的值数。您可能应该检查scanf(";%d%d%d%d%d%d";、x1、y1、x2、y2、x3、y3)返回6
如果(扫描频率(";d%d%d%d%d%d%d%d";、&x1、&y1、&x2、&y2、&x3、&y3)==6){
...
}
您可能希望做的另一件事是为变量设置初始值。如果scanf失败,您仍然可以使用该初始值