使用scanf在c语言中读取浮点数

3

我有一个包含浮点数变量的结构体。

struct MyStruct{
    float p;
}newMyStruct;

我正在使用scanf将一个值读入其中。

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

问题在于使用printf("%f",newMyStruct.p)打印时,它会打印出'0.000000'。此外,我收到了一个警告,该警告指出参数是double类型,而格式要求是float类型(针对scanf("%f",&(newMyStruct.p));语句)。当我将scanf()的语法更改为scanf("%0f",&(newMyStruct.p));时,printf("%0f",newMyStruct.p);正确地打印浮点数值,但编译器发出了另一个警告(与精度为0有关)。 另外,printf("%2f",newMyStruct.p)以其他格式打印浮点数。
因此,我的问题是如何消除所有这些警告并读取正确的浮点变量,使其可以正确地打印。

问题中有一个错别字...... 我确实使用 & - thunderbird
1
scanf() 的警告不太可能是“格式期望它是浮点数”。更可能的是“格式期望它是浮点数指针”。请提供您输入的内容和输出的内容。 - chux - Reinstate Monica
可能是您将一个32位浮点数扫描到已经为0.0double底部,因此您只创建了一个微小的次正常值(仅尾数非零),因此使用%f(而不是科学计数法)打印它会将其四舍五入为零。您的[mcve]使用float,但这很可能不是您实际运行的内容。 - Peter Cordes
1个回答

5

编辑:

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

#include <stdio.h>

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

(说明:这是gcc编译器的版本信息,版本号为4.7.2,操作系统为Debian 4.7.2-5)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接