在c中使用scanf读取浮点数

thu*_*ird 4 c printf scanf string-formatting

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

struct MyStruct{
    float p;
}newMyStruct;
Run Code Online (Sandbox Code Playgroud)

我正在使用它读取一个值 scanf

int main(){
    scanf("%f",&(newMyStruct.p));
}
Run Code Online (Sandbox Code Playgroud)

问题是当我使用printf("%f",newMyStruct.p)它打印它时会打印“0.000000”。此外,我收到一条警告,指出参数是双精度的,而格式预计它是浮点数(该scanf("%f",&(newMyStruct.p));语句的警告)。当我将scanf()语法更改为 时 scanf("%0f",&(newMyStruct.p));,会printf("%0f",newMyStruct.p);正确打印浮点值,但编译器给出了另一个警告(与精度为 0 相关的内容) )。还printf("%2f",newMyStruct.p)以其他格式打印浮点数。

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

我无法访问我通常在其上编码的笔记本电脑,因此我无法提供适当的警告。

Jos*_*ank 6

编辑:

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

#include <stdio.h>

struct MyStruct {
  float p;
} newMyStruct;

int main() {
  scanf("%f", &(newMyStruct.p));
  printf("%f\n", newMyStruct.p);
}
Run Code Online (Sandbox Code Playgroud)

gcc --version 的输出如下:

gcc (Debian 4.7.2-5) 4.7.2