2017-10-25 7 views
0

私は基本的にアンケートのプログラムを書いており、ユーザーが応答する応答も読みます。私のプログラムの最後には、長い応答があったステートメントの割合を印刷したいと思っています。私は長い応答であるために5秒以上のステートメントを宣言しており、それがいつ発生するかを識別するアラーム信号を出しました。これまでのコードはここまでです:私のプログラムでパーセンテージを計算する方法

int count = 0; 
int num; 
float per; 
int main() 
{ 
    num = 0; 
    per = (count/num) *100; 
    printf("percent: %f", per); 
} 
+0

'(count/num)* 100'を' 100.0f * count/num'に置き換えました –

+0

これは次のように出力します:調査を完了していただきありがとうございます。ハンドラは2回呼び出されました パーセント:inf –

+0

もちろん '' inf "'。ヒント: 'num'の使用法を確認してください。 – chux

答えて

2

あなたは0で割ります。 numは、入力に使用する変数です。知られていない理由のために、あなたはそれを最後に分けます。

ハンドラが呼び出された回数を示すカウンタがあります。アンケートに回答した回数を別のカウンターを追加して、メインループでそれを増やします。このような

何か:

int noHandlerCalls=0; // Because good variable names is good 

void handler(int sig){ 
    noHandlerCalls++; 
    ... 
} 

int main() 
{ 
    ... 
    int noSurveyAnswers=0; 

    while (num != 0) { 
     if (num == 5) 
      signal(SIGUSR1, handler); 
     signal(SIGALRM, SIG_IGN); 
     alarm(2); 
     printf("Enter a number\n"); 
     signal(SIGALRM, handler); 
     scanf("%d", &num); 
     noSurveyAnswers++; 
    } 
    ... 
    printf("percent: %f", (100.0*noHandlerCalls)/noSurveyAnswers); 

そして、ところで。投稿する前に、このガイドに従うことが良いでしょうどこの良い例です。https://stackoverflow.com/help/mcve

あなたがした場合は、あなたの質問にだけ、このコードが含まれます:

int count = 0; 
int num; 
float per; 
int main() 
{ 
    num = 0; 
    per = (count/num) *100; 
    printf("percent: %f", per); 
} 

これはかなりその可能な最小のコードでありますあなたが尋ねたエラーを再現しています。その段階では、おそらく自分で考え出したでしょう。 :)

+0

私は長い応答を持っているステートメントの割合を印刷するようにしています。すなわち、3つの中から1つの応答が5秒以上応答していたので、(1/3)* 100を計算します。私は変数を混乱させたようです。 –

+0

恐ろしいです!単に5秒間待機して3つのステートメントを実行し、33.3のパーセントを得ただけです。乾杯。 –

関連する問題