由于我目前无法理解的原因,尽管拥有完成任务所需的一切,但此代码仍无法编译。
#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;
}
我不明白的是为什么它会被编译?我一直在&#34; 错误的说明符&#34;编译时的消息。我尝试了%lf
和%f
,但它们都不起作用。
答案 0 :(得分:4)
您希望使用scanf为双变量分配浮动值。参数需要是指针:
use std::slice;
type IterBox<'a> = Box<Iterator<Item=&'a i32> + 'a>;
trait Trait {
fn iter<'a>(&'a self) -> IterBox;
}
struct Struct<'a, T: 'a> {
items: Vec<&'a T>
}
impl<'a, T: 'a> Struct<'a, T> {
fn iter(&self) -> slice::Iter<i32> {
unimplemented!()
}
}
impl<'a, T: 'a> Trait for Struct<'a, T> {
fn iter(&self) -> IterBox {
Box::new(self.iter())
}
}
fn main() {
let i = 3;
let v = vec![&i];
let mut traits: Vec<Box<Trait>> = Vec::new();
traits.push(Box::new(Struct { items: v }));
}
答案 1 :(得分:4)
更改行
scanf("%f",resistance);
scanf("%f",current);
到
scanf("%lf", &resistance);
scanf("%lf", ¤t);
%f
转换说明符期望相应的参数具有类型float *
,但表达式resistance
和current
都具有类型double
。表达式&resistance
和¤t
的类型为double *
,因此您需要使用%lf
转换说明符(需要类型为double *
的参数)。
答案 2 :(得分:2)
不是printf,而是scanf:
scanf("%f", resistance);
这应该是:
scanf("%lf", &resistance);
%lf
因为它是双重的,%f
适用于花车。而&resistance
因为scanf
期望指向任何东西,所以它可以在那里写。当你写%f
时,printf
只需一个浮点数,scanf
指向浮点数。 %lf
及其double
/ double*
。
答案 3 :(得分:1)
根据C99的标准,float没有独占格式说明符。无论你使用浮点数还是双数,它都不算数。重要的是当你使用float变量时,printf会自动将它升级为double并显示它。因此%f表示双精度值或浮点值,%Lf表示长双精度值。
参考:http://www.cplusplus.com/reference/cstdio/printf/
int main() {
printf("Type in Resistance: ");
scanf("%lf", &resistance);
printf("Type in Current: ");
scanf("%lf", ¤t);
printf("%f Volts",resistance*resistance*current);
}