C项目赢得';尽管使用了正确的说明符,但仍无法编译?
出于我目前不理解的原因,尽管这段代码拥有完成任务所需的一切,但它不会编译C项目赢得';尽管使用了正确的说明符,但仍无法编译?,c,scanf,format-specifiers,C,Scanf,Format Specifiers,出于我目前不理解的原因,尽管这段代码拥有完成任务所需的一切,但它不会编译 #include <stdio.h> /* printf */ #include <math.h> double resistance; double voltage; double current; double wattage; int main() { printf("type in resistance\n"); scanf("%f",resistance);
#include <stdio.h> /* printf */
#include <math.h>
double resistance;
double voltage;
double current;
double wattage;
int main()
{
printf("type in resistance\n");
scanf("%f",resistance);
printf("type in current");
scanf("%f",current);
//voltage = resistance*resistance*current;
printf("%f Volts",resistance*resistance*current);
// return voltage;
}
#包括/*printf*/
#包括
双电阻;
双电压;
双电流;
双瓦数;
int main()
{
printf(“输入电阻”);
scanf(“%f”,电阻);
printf(“输入电流”);
扫描频率(“%f”,当前);
//电压=电阻*电阻*电流;
printf(“%f伏”,电阻*电阻*电流);
//返回电压;
}
我不明白的是为什么它不能编译?编译时,我不断收到“错误的说明符”消息。我尝试了
%lf
和%f
两种方法,但它们都不起作用。您想使用scanf为双变量分配一个浮点值。参数必须是指针:
int main() {
printf("\ntype in resistance\n");
scanf("%lf",&resistance);
printf("\ntype in current");
scanf("%lf",¤t);
//voltage = resistance*resistance*current;
printf("\n%f Volts",resistance*resistance*current);
// return voltage;
}
它不是printf,而是scanf:
scanf("%f", resistance);
这应该是:
scanf("%lf", &resistance);
%lf
因为它是双精度的,%f
用于浮点数。和&阻力
,因为scanf
需要一个指向任何东西的指针,所以它可以在那里写入。当您编写%f
时,printf
只需要一个浮点,scanf
一个指向浮点的指针<代码>%lf并且是double
/double*
更改行
scanf("%f",resistance);
scanf("%f",current);
到
%f
转换说明符要求相应的参数具有typefloat*
,但表达式resistance
和current
都具有typedouble
。表达式&resistance
和¤t
具有类型double*
,因此需要使用%lf
转换说明符(该说明符需要类型为double*
的参数) 根据C99标准,浮点没有唯一的格式说明符。不管你使用浮点数还是双精度,它都不算数。重要的是,当使用浮点变量时,printf会自动将其升级为double并显示它。因此%f表示双精度或浮点值,%Lf用于长双精度值
参考:
仔细查看第二个参数至
scanf
。GCC为您提供了正确的信息:x.c:13:7:警告:格式“%f”要求参数类型为“float*”,但参数2的类型为“double”[-Wformat=]
我不确定是否理解,它们在我看来都是一样的。我认为您指的是scanf(“%f”,当前);顺便说一句:电压=电阻*电阻*电流
错误。应该是电压=电阻*电流
%lf“
,因为它是双*
,%f”
用于浮点数*
。相关问题:浮点数是否没有
,但是它没有像
那样提供任何特定的宽度类型或格式宏。出于某种原因,我一直得到0作为答案?它使用*作为指针而不是乘法吗?双电阻;扫描频率(“%lf”、&电阻)
-->添加l
@obito94:输入电阻值
和电流值后打印出来。正如我在下面指出的,您应该使用%lf
读取双
变量。我现在得到了电阻值,但电流从未显示,并且由于某种原因,答案总是以伏特为单位=电阻抱歉,这是一个输入错误。更正。此答案与printf()
格式说明符有关,这不是OP的问题。OP的问题是scanf()
的格式说明符不正确。使用“%f”
或“%lf”
及其匹配的指针类型至关重要。
scanf("%lf", &resistance);
scanf("%lf", ¤t);
int main() {
printf("Type in Resistance: ");
scanf("%lf", &resistance);
printf("Type in Current: ");
scanf("%lf", ¤t);
printf("%f Volts",resistance*resistance*current);
}