2016-04-07 10 views
-4

私は、この問題をやろうとしています:http://poj.org/problem?id=1003カード二日酔いC

#include <stdio.h> 

    int c; 
    int a = 0; 
    int i; 


    int main() 
    { 
     scanf("%.2f", &c); 
     if (0.01 <= c <= 5.20){ 
      for (i = 1; a < c; ++i){ 
       a += (1/(i + 1)); 
      } 
      printf("%d card(s)", i + 1); 
     } 
     return 0; 
    } 

私のコードが動作しませんか?何らかの理由で、私は何を入力しても常に2枚のカードを返します。誰かが問題を見つけることができますか?

ありがとうございます!

+1

これはデバッグサービスではありません。そして、**あなたのすべての必要な情報を提供しなければなりません**。 – Olaf

+0

'1 + 1 = 2'です。あるいは、別の言い方をすると、「0」は「0.01」未満です。うーん、ちょうど 'c'は浮動小数点ではないことに気づいた。私はそれが 'scanf'に基づいていると仮定しました。 – user3386109

+2

警告レベルが表示されましたか?現代のコンパイラは、あなたの 'scanf'文で互換性のない指定子と引数について警告することを期待しています。 –

答えて

1

問題1:

if (0.01 <= c <= 5.20){ 

正しい方法は、あなたが書いたかのようにあなたのコードが解釈され

if (0.01 <= c && c <= 5.20){ 

です:これは、変数が2つの値の間にあるかどうかをテストする方法ではありません。

if ((0.01 <= c) <= 5.20){ 

(0.01 <= c)0またはのいずれかになりますであり、両方とも5.20よりも小さいので、常にtrueです。

問題2:int変数はscanfでそれらで画分、および%fフォーマットを持つことができないので、変数acは、intfloatである必要はないが、対応する引数がfloatへのポインタであることが必要です。

+0

ええと、私はそれらを変更しましたが、現在は何も出力していません。申し訳ありませんが、私はかなりプログラミングに新しいです。 –