Eclipse中的printf

Eclipse中的printf,c,eclipse,C,Eclipse,我必须在C语言中使用eclipse。我编写了一个简单的程序,但是我在使用printf命令时遇到了一个问题,该命令不能正常工作。有什么想法吗? 代码如下: #include <stdio.h> void change(double *x, double *y) { double help = *x; *x = *y; *y = help; return; } int main() { double x=0, y=0; printf("please give a value

我必须在C语言中使用eclipse。我编写了一个简单的程序,但是我在使用
printf
命令时遇到了一个问题,该命令不能正常工作。有什么想法吗? 代码如下:

#include <stdio.h>
void change(double *x, double *y)
{
 double help = *x;
  *x = *y;
 *y = help;
 return;
}

int main()
{
double x=0, y=0;

printf("please give a value to a  \n ");
scanf("%f",&x);
printf("please give a value to b  \n");
scanf("%f",&y);

printf("x=%.2f\t y=%.2f\n",x,y);
printf("will give \n");
change(&x,&y);
printf("x=%.2f\t y=%.2f\n",x,y);
return 0;
}
#包括
无效更改(双*x,双*y)
{
双重帮助=*x;
*x=*y;
*y=帮助;
返回;
}
int main()
{
双x=0,y=0;
printf(“请给a一个值”);
scanf(“%f”、&x);
printf(“请给b\n一个值”);
扫描频率(“%f”和“y”);
printf(“x=%.2f\t y=%.2f\n”,x,y);
printf(“将提供\n”);
变化(&x和&y);
printf(“x=%.2f\t y=%.2f\n”,x,y);
返回0;
}

所以问题是我没有先得到这个
printf

您的所有值都是
双精度
,必须使用
%lf
。但是您使用的是调用未定义行为的
%f


在扫描和打印中,将
%f
更改为
%lf

获得打印f意味着什么?将
双精度
更改为
浮动
或使用
%lf
<代码>%f仅用于
浮动
%lf
仅适用于
double
。在使用double时,scanf和printf之间存在着巨大的差异:在scanf中使用
%lf
。和
%f
在printf中。除了@nneonneo的评论和@KingsIndian的回答:
%f
用于
printf
中的
double
,因为当您将
float
传递给
printf
时,它将被提升为
double
。既然您将地址传递给了
scanf
,您就必须区分
float*
double*
,因为它们显然是两个不同的东西。当然,但最好不要依赖这样的隐性促销。保持对称:
%lf
对于
double
%f
对于
float
。当我尝试调试程序扫描顺序%lf%f不是问题时,问题是为什么第一个printf即使没有%lf或%f也不能工作???程序是正确的我的问题是为什么eclipse不能正确运行它?再次感谢您的帮助我在您的问题/评论中没有看到任何与VS相关的问题。向printf传递不正确的格式说明符是未定义的,因此任何事情都可能发生。这是未定义的行为,因此可以在某些平台/编译器上工作,但不需要。Eclipse本身不是一个编译器(或VS),但在大多数情况下它使用GCC。是的,我使用GCC它毕竟可以工作,但前提是我在控制台上给出一些数字,并且x和y的最后一个值保持不变,这意味着x=0和y=0。这里还有一个例子:#include int main(){int I=0,j=0;printf(“为I提供值”);scanf(“%d”,&i);print(“为j提供值”);scanf(“%d”,&j);printf(“i值为%d,j值为%d”,i,j);返回0;}