在c中使用scanf读取浮点数

我有一个包含浮点变量的结构,

struct MyStruct{ float p; }newMyStruct; 

我正在使用scanf读取一个值

 int main(){ scanf("%f",&(newMyStruct.p)); } 

问题是当我使用printf("%f",newMyStruct.p)打印它时printf("%f",newMyStruct.p)它打印’0.000000’。 另外我得到一个警告,说格式是双重的,而格式期望它是浮点数(警告scanf("%f",&(newMyStruct.p));语句)。当我将scanf()语法更改为scanf("%0f",&(newMyStruct.p));printf("%0f",newMyStruct.p); 正确打印浮点值但编译器给出了另一个警告(与精度为0的相关内容)。 printf("%2f",newMyStruct.p)也以其他格式打印浮点数。

所以,我的问题是我如何摆脱所有这些警告,并阅读一个适当的浮动变量,也可以正确打印。

我无法访问我通常编码的笔记本电脑,因此我无法提供正确的警告。

编辑:

我无法重现这个问题。 当我使用以下用gcc编译的代码时,一切都按预期工作:

 #include  struct MyStruct { float p; } newMyStruct; int main() { scanf("%f", &(newMyStruct.p)); printf("%f\n", newMyStruct.p); } 

gcc –version的输出如下:

gcc(Debian 4.7.2-5)4.7.2