我的火车代码出了什么问题?

时间:2014-01-08 22:16:50

标签: c

#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;
}    

我一直都是零,因为我的答案可以告诉我什么是错的?

3 个答案:

答案 0 :(得分:6)

您正在调用此scanf

 scanf("%1f, &vel2");

但我认为你想要

 scanf("%lf", &vel2);
         ^  
         ^  

同样适用于vel1。你还需要

 scanf("%lf", &distance);
         ^
         ^

"%lf"(应该用于扫描double - 你的变量是哪个)和你当前使用的"%1f"作为第一个参数传递给{scanf之间的细微差别{1}}。

您当前拨打scanf的方式会导致vel1vel2保持未初始化状态,因为您的报价位置错误。您的引用位于distance的正确位置,但在scanf vel1vel21. 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,如果您想知道的话)。