2012-01-05 9 views
-4

以下のコードは、押されたキーの数を数え、押された数字キーの割合とともに画面に表示します。コードを実行すると、パーセンテージは常に0です。なぜですか?数字キーストロークの割合の計算に失敗しました

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 


int main() 
{ 
int c,count=0,count1=0; 
float d; 
while ((c=getch())) 
{ 
    count = count++; 
if (c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9'||c=='0') 
    { 
     count1=count1++; 
    } 
    if (c=='!') 
    { 
     d=(count1/count*100); 
     printf("\nnumbers of keys is %d percentage of number keys is %.3d percent",count,d); 
    } 

    } 
return 0; 

}

+5

質問。あなたはそれを誤解している。 – log0

+4

あなたはそれを間違ってやっています。 –

+2

上記のコメントと下記のコメントの両方に+1してください。 1)すべての大文字を使用しない、2)未定義の動作を使用しないでください( 'x = x ++' ==未定義の動作、シーケンスポイントを参照)。 3)整数除算が失敗します。 – Joe

答えて

0

問題はdがフロートであっても、countcount1intあることです。

d=((float)count1/count*100); 

floatconverts the division to floating pointcount1をキャスト:あなたは

d=(count1/count*100); 

ではなく、これを行うと言うときは、したがって、整数演算をやっています。

2

ライン

count = count++; 

count1 = count1++; 

は未定義の動作ですので、全てのベットはオフになっています。たとえそれが未定義の振る舞いではなかったとしても、x++はインクリメントの前にxの値を返すので、あなたが望むことはできません。

単純に++count;++count1;としましょう。

+0

良いキャッチ。 'count ++;'と 'count1 ++;'も同様です。 – Caleb

関連する問題