2013-04-29 3 views
0

글쎄, 우선, 나는 C에 정통한 것에 익숙하지 않으므로 간단한 대답이 될 수도 있지만 그것이 무엇인지 알 수는 없다. 더욱이, 제 영어는 당신이 완벽하다고 부르는 것이 아니기 때문에, 이해하기가 어렵다면 사전에 사과드립니다.C에 부동 소수점 숫자가있는 버그

나는 고정 된 속도로 여행 시간에 대한 간단한 계산을 할 수있는이 작은 프로그램을하려고합니다. 내가 입력해야하는 것은 이동 거리입니다. 필자는 코드를 작성하기 시작했고, 얼마 지나지 않아 반 기능 콘솔 프로그램을 만들었지 만, 커지면서 커지면서 코드에 더 이상 플로트 번호를 추가 할 수없는 지점이되었습니다. I 출력에 문제가 없다, 그것은 위에서와 같이 코드를 실행하려고하면

#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를 사용하여) 프로그램 버그가 발생합니다 : "Esc dist 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 함수와 scan 명령 다음에 코드 부분을 변경하면 모든 것이 거의 완벽 해졌습니다. (프로그램이 마지막 else 명령으로 문제를 일으키기 시작했습니다. 이전의 "if"는 아니지만 삭제 했으므로 괜찮습니다.) 정말 고마워요. 지금은 어째서 이것이 어땠는지 = 배울 수있는 어딘가를 찾아야합니다.) 다시 한번 감사드립니다! –