2013-04-29 95 views
0

那么,首先,我没有什么接近于C语言,所以这可能有一个简单的答案,但我无法弄清楚它可能是什么。而且,我的英语不是你所说的完美,所以如果我让自己难以理解,我会提前道歉。C上的浮点数量的错误

我想要做这个小程序,它可以让我用固定速度对旅行时间进行简单的计算,所有我必须输入的就是旅行距离。我开始编写代码,很快我得到了一个半功能的控制台程序,但随后它开始增长和增长,然后出现了一个点,我似乎无法在代码中添加更多的浮点数。这里是到目前为止的代码:

#include<stdio.h> 
#include <string.h> 
#include <math.h> 

/* TENGO QUE ARREGLAR ESTO, ME CAUSA BRONCA CON EL NÚMERO TOTAL DE FLOAT NUMBERS*/ 
main() 
{ 
float x1, km, mn, mn1, mn1a, mn1b, mn1c, mn2, mn2a, mn2b, mn2c, mn3, mn3a, mn3b,  mn3c, mn4; 
    int c=1; 
    printf("\n\n\tTiempo de recorrido\n\n"); 
    if (x1 >= 0) 
    { 
    do 
    { 
    printf("\tEscribe distancia en mapa: "); 
    scanf("%f", &x1); 
    c = x1; 
    km = x1*50; // Distancia real 
    mn = km; 
    mn1 = mn/5; // Tiempo de viaje 
    mn1a = mn1/18; // Jornadas de marcha 
    mn1b = mn1 + (floorf(mn1a)*6); // Tiempo total del viaje 
    mn1c = mn1b/24; // Días totales de viaje 
    mn2 = mn/8;// Tiempo de viaje 
    mn2a = mn2/18; // Jornadas de marcha 
    mn2b = mn2 + (floorf(mn2a)*6); // Tiempo total del viaje 
    mn2c = mn2b/24; // Dias totales de viaje 
    mn3 = mn/25;// Tiempo de viaje 
    mn3a = mn3/18; 



    //Instrucciones PRINT 
    printf("\n\n\tNumero de kilometros = %3.2f km", km); 
    if (mn1 < 24){ 
    printf("\n\n\tTiempo a 5 km/h (caminata) = %3.2f horas", mn1); 
    } 
    else{ 
    printf("\n\n\tViaje en caminata (5 km/h)\n"); 
    printf("\n\tTiempo de recorrido = %3.2f horas", mn1); 
    printf("\n\tJornadas de marcha = %3.2f jornadas", mn1a); 
    printf("\n\tTiempo total = %3.2f horas", mn1b); 
    printf("\n\tDias totales = %3.2f dias\n", mn1c);} 
    if (mn2 < 24){ 
    printf("\n\tTiempo a 8 km/h (a caballo) = %3.2f horas", mn2);} 
    else{ 
    printf("\n\n\tViaje a caballo (8 km/h)\n"); 
    printf("\n\tTiempo de viaje = %3.2f horas", mn2); 
    printf("\n\tJornadas de marcha = %3.2f dias", mn2a); 
    printf("\n\tTiempo total = %3.2f horas", mn2b); 
    printf("\n\tDias totales = %3.2f dias\n", mn2c); 
    } 
    if (mn3 < 24){ 
    printf("\n\tTiempo a 25 km/h = %3.2f horas\n", mn3); 
    } 
    else{ 
    printf("\n\n\tTrote de caballo (25 km/h)\n"); 
    printf("\n\tTiempo de viaje = %3.2f horas", mn3); 
    printf("\n\tJornadas de marcha = %&.2f días", mn3a); 
    printf("\n\tJornadas de marcha = %3.2f horas", mn3);  
    } 
    } 
    while (c >= 0); 
    } 
    else{ 
    getch(); 
    } 
} 

现在,当我尝试运行的代码,因为它的正上方,有一个与输出没有问题。但是,当我尝试在下面添加另一个变量声明时(使用已经在float声明中添加的mn4),程序会出错:我只会得到文本“Escribe la distancia en el mapa”(不带:符号“),当我输入任何键时,它会发送消息“Process exited with return value 49/50”,并在下一次击键后关闭。

我试过用我能想到的任何方式思考代码,但是没有任何工作,除了它改变了返回值49和50之间,出于某种原因,我希望有人能告诉我如何解决这个问题,或者,如果这是不可能的,告诉我为什么这样,所以我可以找到一个这种方式

在此先感谢您。

+0

您应该了解并使用数组(加上for循环),而不需要使用非常相似的名称和非常相似的计算的许多变量。 http://www.cplusplus.com/doc/tutorial/arrays/(你也应该考虑不使用C,因为C是非常低的级别,而且你没有编码任何需要性能的代码 - 用Python这样的语言编码会使它更快的程序员,编写和性能差异将可以忽略不计。希望我不会为此发火焰:)) – Patashu 2013-04-29 22:56:23

+3

'=%&。2fdías“,mn3a);' - 无效的格式修改器! – suspectus 2013-04-29 23:02:16

回答

4

发生这种情况是因为你将所有东西都包裹在一个很大的if (x1 >= 0)中。似乎你在一开始就对一个未初始化的变量进行分支,因为......没有可辨别的原因。

我想你的意思是读x1,然后改变你的计算值。

+0

谢谢太多了!我不知道为什么会发生这种情况,但是我将代码中的那部分代码改成了do函数和scan命令之后,一切都变得完美了(程序开始给我带来最后一个else命令的麻烦,说有没有以前的“如果”,但我删除了它,这是很好)。非常感谢你,现在我必须找到一个地方,我可以了解为什么这是=)再次感谢! – 2013-04-30 06:12:39