Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C项目赢得';尽管使用了正确的说明符,但仍无法编译?_C_Scanf_Format Specifiers - Fatal编程技术网

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",&current);
    //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
转换说明符要求相应的参数具有type
float*
,但表达式
resistance
current
都具有type
double
。表达式
&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", &current);
int main() {

   printf("Type in Resistance: ");
   scanf("%lf", &resistance);
   printf("Type in Current: ");
   scanf("%lf", &current);
   printf("%f Volts",resistance*resistance*current);
}