2013-04-29 94 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