最初にまず警告をオンにします。 Cのコンパイラは通常、警告を出すことはありませんが、基本的に(すべてではありません)基本的には-Wall
です。私たちはやるたらあなたがprintf
に浮動小数点数を渡すが、整数として扱いしようとしているので、間違って文字列に変換することになるだろうしているを教えてくれる
test.c:17:36: warning: format specifies type 'int' but the argument has type 'double' [-Wformat]
printf("%d $%d\n", year, output);
~~ ^~~~~~
%f
...という。それが必要です。浮動小数点数、およびお金だけのような小数点以下を使用する.2
手段のための
printf("%d $%.2f\n", year, output);
%f
。
test.c:9:14: warning: expression result unused [-Wunused-value]
rate + 0.01;
~~~~^~~~~
2 warnings generated.
この1つはrate
がインクリメントされることはありませんことを教えてくれる。これは追加されましたが、どこにも保存されませんでした。代わりにrate += 0.01
が必要です。
これが実行されます。一度。
問題は外側のdo/whileループがyear
を使用していますが、for
のループはしきい値で終了しますので、すぐに終了します。まれに必要なdo/whileループを使用する代わりに、forループをもう1つ使用してください。
第2の問題は、出力と年をループyear
for
の外側に印刷していることです。だから、昨年の結果しか得られません。すべての年が欲しいなら、印刷物は中に入る。
#include <stdio.h>
int main(void)
{
const double initial_loan = 1000.00;
for(double rate = 0.01; rate <= 0.10; rate += 0.01) {
double loan = initial_loan;
for (int year = 1; year <= 10; year++) {
loan += rate*loan;
printf("%d @ %.2f%% $%.2f\n", year, rate * 100, loan);
}
}
return 0;
}
可能な限り狭い範囲で変数を宣言しています。これは、使用するのが適切であることを通知し、外側のループにyear
を使用しようとするようなものを避けます。
多くのCマテリアルは非常に控えめで、関数の開始時にすべての変数を宣言するように指示します。これは必要ではなく、長い間ずっと続いています。 for
ループ内の変数を宣言することはC99のことですが、C99のその部分は非常にうまくサポートされています。
'rate + 0.01'は役に立ちません –
ユーザは何かを入力する必要がありますか?私はあなたが実際にプログラムがしたいことを理解することは明らかではありません。出力はどのように表示されるべきですか? –
ユーザーは何も入力しません。プログラムは、レートを表示してテーブルに出力し、そのレートで関心が何であるかを表示する必要があります。したがって、関心のある10行と、その金利での対応する合計を出力する必要があります。 – dreed