0

なぜtime1変数がゼロになるのかという問題が発生したとき。床の計算直後。

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
   int curfl = 0, destfl, floor;
   int time1, high, speed;
   high = 3;
   speed = 5;
   while(1)
   {
       printf("Currently the elevator is at floor number = %d\n", curfl);
       printf("Enter the floor number between 0-25 : ");
       scanf("%d", &destfl);
       if(destfl > curfl)


       {
               floor = destfl - curfl;
                /*****************************/
               time1 = (floor * (high / speed));  //variable become zero here
               /*****************************/
               printf("Elevator will take %d second to reach %d (st, nd, rd) floor \n", time1, destfl);
               while(curfl != destfl)
               {
               Sleep(1000 * 3 / 5);
               curfl++;
               printf("You are at floor number %d \n", curfl);
           }
           printf("Door opening \n");
           Sleep(10000);
           printf("Door Closed\n");
       }
       else if(destfl > curfl)
       {
           floor = curfl - destfl;
           time1 = (floor * (3 / 5));
           printf("Elevator will take %d second to reach %d (st, nd, rd) floor \n", time1, destfl);
           while(curfl != destfl)
           {
               Sleep(1000 * 3 / 5);
               curfl--;
               printf("You are at floor number %d \n", curfl);
           }
           printf("Door opening \n");
           Sleep(10000);
           printf("Door Closed\n");
       }
       else{
           printf("You are the same floor. Please getout from the elevator \n");
       }
}
   // printf("Hello world!\n");
    return 0;
}
4

3 に答える 3

1

整数計算を行っています。分数を処理するものに切り替えます。

于 2012-06-05T14:13:21.027 に答える
1

整数除算を実行しています。整数に対して演算を行うと、結果も整数になります。つまり、整数ランドでは 1 / 3 = 0 のようなものです。すると(high / speed)、一時的な結果は整数になり、答えが小数 < 1 の場合、結果は単純に 0 に切り捨てられます。

これを修正するには、代わりにfloatorを使用するようにコードを変更する必要があります。doubleint

于 2012-06-05T14:14:47.267 に答える
0

次のようにtime1を計算します。

int curfl = 0, destfl, floor;
int high;
float speed, time1;
................................
time1 = (floor * (high / speed));

組み込み機器のようです。したがって、浮動小数点演算をどのようにサポートするかわかりません。サポートされていない場合は、除算アルゴリズムを選択し、次のような型を宣言します。

struct myfloat{
   int precision;
   int exponent;
}

次に、次のような除算関数を記述します。

struct myfloat * divide(int a, int b) /* gives result for a/b */
于 2012-06-05T14:23:16.490 に答える