

実行例を次のようにしたいのですが、エラーが出てしまいます。

[code]

    $ ./a.out
    元金(円): 1000000
    年利率(%): 0.001
    預入期間(年): 10
     1年目: 1000010 円
     2年目: 1000020 円
     3年目: 1000030 円
     4年目: 1000040 円
     5年目: 1000050 円
     6年目: 1000060 円
     7年目: 1000070 円
     8年目: 1000080 円
     9年目: 1000090 円
    10年目: 1000100 円
    
[/code]

自分は次のようにプログラムしエラーが出てしまいました。

[code]

    int main(void)
    {
        int i,m,n,y;
    
        printf("元金： ");
        scanf("%d",&m);
        printf("年利率(%)： ");
        scanf("%d",&n);
        printf("預入期間(年)： ");
        scanf("%d",&y);
        for(i=m;i<=y;i=i+n/100){
            printf("i年目：%d円\n",i);
        }
    
        return 0;
    }
    
[/code]

[code]

    ex0304.c: In function ‘main’:
    ex0304.c:8:24: warning: unknown conversion type character ‘)’ in format [-Wformat=]
         printf("年利率(%)： ");
                            ^
    
[/code]


CC BY-SA 4.0
2019-11-27T07:11:24.503
60885
2019-11-28T03:57:40.387
2019-11-27T07:33:26.547
19110
36412
question
c
年利の計算について


`printf` 中や `scanf` 中のフォーマット文字列内において `%`
は単独で使いません。必ず後ろに既知の一文字以上を伴う義務があります。一般文字列中の `\` と同じっすね。

百分率文字 `%` を画面に表示したいのなら `printf("%d%%", 100);` となります。


CC BY-SA 4.0
2019-11-27T07:28:49.267
60886
2019-11-27T07:28:49.267
8589
60885
answer


`printf` では `%` 記号に続けて **型指定子** を記述する必要があります (以下の例なら "d" や "c" の部分)。

例:

[code]

    printf("%d", num); ## 10進数
    printf("%s", str); ## 文字列
    
[/code]

しかし、ワーニングの出ている箇所では `%` 記号そのままを出力しようと `(%)` のように記述していますが、ここで `%)`
という未知の型指定をしたものとみなされてワーニングになっています。

`%` 記号を文字としてそのまま `printf` で出力したい場合には、`%%` のように記述します。

[code]

    printf("%d%%", num);
    
[/code]

* * *

なお、ワーニングが表示されている箇所以外にも間違っている箇所が複数あるため、`printf` の部分だけを直しても期待通りの動作にはならないと思います。


CC BY-SA 4.0
2019-11-27T07:35:27.800
60888
2019-11-27T08:16:27.053
2019-11-27T08:16:27.053
3060
3060
60885
answer


ちなみに、@cubick さんが「ワーニングが表示されている箇所以外にも間違っている箇所が複数ある」と言っているのは以下の点です。

  * 年利率データは整数であらわせない値なのに、整数として変数に入力しようとしています。  
(ちなみにWindowsのVisualC++だと、実行しても年利率に`0.001`を入力すると次の預入期間(年):の入力がスキップされてしまい、かつ以下のように`for`ループは実行されず表示無しで終了します)

  * `for`ループの制御部分でループ回数の制御と金利適用結果の計算が混ぜ合わされて意味のないものになっていて、かつ1度も実行されない状態になっています。  
(ループ回数の制御と金利適用結果の計算は独立して行いましょう)

  * 例え実行できたとしても、結果表示に指定したフォーマット文字列および表示する変数の指定が間違っているので、希望する表示結果にはなりません。  
(表示するのにどんなデータが必要で、それはどうやってフォーマット文字列に組み込むかを考えてみてください)

少しだけ注意深くなって考えてみましょう。


CC BY-SA 4.0
2019-11-28T03:57:40.387
60905
2019-11-28T03:57:40.387
26370
60885
answer