2013-04-29 6 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(); 
    } 
} 

Теперь, когда я пытаюсь запустить код, как это выше, нет никаких проблем с выходом. Но, когда я пытаюсь добавить другое объявление переменной ниже (с mn4, который уже добавлен в декларации float), программа отключается: я получаю только текст «Escribe la distancia en el mapa» (без символа:), и когда я набираю любой ключ, он отправляет сообщение «Процесс завершен с возвратным значением 49/50», и он закрывается после следующего нажатия клавиши.

Я пробовал мыслить с кодом в любом случае, я могу думать, но ничего не сработало, за исключением того, что по какой-то причине оно меняло значения возврата между 49 и 50. Надеюсь, кто-то может сказать мне, как это исправить, или, если это невозможно, сказать мне, почему это так, поэтому я могу найти .

Заранее благодарен

+0

Вы должны узнать, а затем использовать массивы (плюс для циклов) вместо того, чтобы требовать столько переменных с очень похожими именами и очень похожими вычислениями. http://www.cplusplus.com/doc/tutorial/arrays/ (Вы также должны подумать о том, чтобы не использовать C, поскольку C очень низкий уровень, и вы не кодируете все, что требует производительности, - кодирование на языке, таком как Python, сделает его быстрее, для ВАС, программист, чтобы написать, а разница в производительности будет незначительной. Надеюсь, я не буду пылать за это :)) – Patashu

+3

'=% &. 2f días", mn3a); '- недействительный формат модификатора! – suspectus

ответ

4

Это происходит потому, что вы завернули все в большом большом if (x1 >= 0). Кажется, что вы делаете ветку по неинициализированной переменной в самом начале, потому что ... нет заметной причины.

Я думаю, вы хотели прочитать x1, а затем вместо этого вычислить свои вычисления на его значении.

+0

Спасибо Я не знаю, почему это произошло, но я изменил эту часть кода после функции do и команды сканирования, и все прошло почти идеально (программа начала давать мне неприятности с последней командой else, говоря, что есть нет предыдущего «if», но я удалил его, и все в порядке). Большое вам спасибо, теперь я должен найти где-нибудь, где я могу узнать, почему это было так =) Еще раз спасибо! –

Смежные вопросы