#include<stdio.h>
#include<stdlib.h>
#define MINUTES_PER_HOUR 60
int main(void){
double distance, vel1, vel2;
double min_to_meet;
int hr_to_meet;
printf("enter the distance separating the trains?\n");
scanf("%1f", &distance);
printf("what is the speed of train 1?\n");
scanf("%1f, &vel1");
printf("what is the speed of train 2?\n");
scanf("%1f, &vel2");
hr_to_meet = distance/(vel1 + vel2);
min_to_meet = hr_to_meet*MINUTES_PER_HOUR;
printf("it will take %.31f minutes to meet.\n", min_to_meet);
printf("the first train will travel %.21f miles.\n", vel1*hr_to_meet);
printf("the second train will travel %.21f miles.\n", vel2*hr_to_meet);
system("pause");
return 0;
}
我一直都是零,因为我的答案可以告诉我什么是错的?
答案 0 :(得分:6)
您正在调用此scanf
scanf("%1f, &vel2");
但我认为你想要
scanf("%lf", &vel2);
^
^
同样适用于vel1
。你还需要
scanf("%lf", &distance);
^
^
"%lf"
(应该用于扫描double
- 你的变量是哪个)和你当前使用的"%1f"
作为第一个参数传递给{scanf
之间的细微差别{1}}。
您当前拨打scanf
的方式会导致vel1
和vel2
保持未初始化状态,因为您的报价位置错误。您的引用位于distance
的正确位置,但在scanf
vel1
和vel21. This makes your calculations for
hr_to_meet`调用不正确的情况下,您尚未提及此信息。
答案 1 :(得分:4)
修复您的scanf:
scanf("%1f, &vel2");
scanf("%1f, &vel1");
注意:上面的代码将编译,但它不会将任何内容分配给vel1和vel2,因为它们是scanf
为:
scanf("%lf", &vel1);
scanf("%lf", &vel2);
这将编译并将扫描的变量分配到vel1和vel2。
你也可以提到指定双打:
scanf("%1f", &distance);//takes float
scanf("%lf", &distance);//takes long float which is double
答案 2 :(得分:1)
浮动与双重:
scanf("%f",...) /* must take the address of a float variable. */
scanf("%lf",...) /* must take the address of a double variable. */
因此,要么将变量类型从double更改为float,要么将%f
更改为%lf
。
注意:在%lf
中,第二个字符是小写字母L(而不是数字1,如果您想知道的话)。