質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • C

    3963questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C言語 銀行口座への入金と出金のプログラム。

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 245

Masaki21

score 8

銀行口座に振り込み、引き出しを計算し出力させるプログラミングです。
txtファイルを読み取って計算します。
ほぼ完成しているのですが、私のアウトプットと教科書のアウトプットの答えが少し違うのです。
具体的にアウトプットのDepositとCheckの部分が違います。
わかる方いますか?気になったところを指摘いただけたらと思います。

コード
#include <stdio.h>
#include <stdlib.h>
FILE *fp, *csis;

void outputHeaders(void);
void initialBalance(double amount, double *balance, double *service, double *openBalance);
void deposit(double amount, double *balance, double *service, int *numDeposit, double *amtDeposit);
void check(double amount, double *balance, double *service, int *numCheck, double *amtCheck);
void outputSummary(int numDeposit, double amtDeposit, int numCheck, double amtCheck, double openBalance, double service, double closeBalance);


int main(void)
{
    char code;
    double amount, service, balance;
    double amtCheck, amtDeposit, openBalance, closeBalance;
    int numCheck, numDeposit;

    if (!(fp = fopen("account.txt", "r"))) {
        printf("account.txt could not be opened for input.");
        exit(1);
    }
    if (!(csis = fopen("csis.txt", "w"))) {
        printf("csis.txt could not be opened for output.");
        exit(1);
    }

    amount = 0;
    service = 0;
    balance = 0;
    amtCheck = 0;
    amtDeposit = 0;
    openBalance = 0;
    closeBalance = 0;
    numCheck = 0;
    numDeposit = 0;

    outputHeaders();

    while (!feof(fp)) {
        fscanf(fp, "%c %lf\n", &code, &amount);
        if (code == 'I') {
            initialBalance(amount, &balance, &service, &openBalance);
        }
        else if (code == 'D') {
            deposit(amount, &balance, &service, &numDeposit, &amtDeposit);
        }
        else {
            check(amount, &balance, &service, &numCheck, &amtCheck);
        }
    }

    closeBalance = balance - service;
    outputSummary(numDeposit, amtDeposit, numCheck, amtCheck, openBalance, service, closeBalance);

    fclose(csis);
    fclose(fp);

    return 0;
}

void outputHeaders()
{
    printf("Transaction\t\t Deposit\t\t Check\t\t Balance\n");
    printf("-----------\t\t -------\t\t -----\t\t -------\n");
    fprintf(csis, "Transaction\t\t Deposit\t\t Check\t\t Balance\n");
    fprintf(csis, "-----------\t\t -------\t\t -----\t\t -------\n");
}

void initialBalance(double amount, double *balance, double *service, double *openBalance)
{
    *openBalance = amount;
    *balance = *openBalance;
    *service = 3.00;

    printf("Initial Balance\t \t \t \t \t\t\t\t%8.2lf\n", *openBalance);
    fprintf(csis, "Initial Balance\t \t \t \t \t\t\t\t%8.2lf\n", *openBalance);
}

void deposit(double amount, double *balance, double *service, int *numDeposit, double *amtDeposit)
{
    *balance += amount;
    *amtDeposit += amount;
    *numDeposit += 1;
    *service += 0.03;

    printf("Deposit\t\t\t %8.2lf\t \t\t\t\t%8.2lf\n", *amtDeposit, *balance);
    fprintf(csis, "Deposit\t\t\t %8.2lf\t \t\t\t\t%8.2lf\n", *amtDeposit, *balance);
}

void check(double amount, double *balance, double *service, int *numCheck, double *amtCheck)
{
    *balance -= amount;
    *amtCheck += amount;
    *numCheck += 1;

    if (*balance < 0.00) {
        *service += 5.00;
    }
     {
        *service += 0.06;
    }

    printf("Check\t\t\t\t\t\t %9.2lf\t\t%8.2lf\n", *amtCheck, *balance);
    fprintf(csis, "Check\t\t\t\t\t\t %9.2lf\t\t%8.2lf\n", *amtCheck, *balance);
}

void outputSummary(int numDeposit, double amtDeposit, int numCheck, double amtCheck, double openBalance, double service, double closeBalance)
{
    printf("\nTotal number deposits:      %d\n", numDeposit);
    printf("Total amount deposits: %.2lf\n\n", amtDeposit);
    printf("  Total number checks:       %d\n", numCheck);
    printf("  Total amount checks: %.2lf\n\n", amtCheck);
    printf(" Total service charge:   %.2lf\n\n", service);
    printf("      Opening balance:  %.2lf\n", openBalance);
    printf("      Closing balance:  %.2lf\n", closeBalance);

    fprintf(csis, "\nTotal number deposits:      %d\n", numDeposit);
    fprintf(csis, "Total amount deposits: %.2lf\n\n", amtDeposit);
    fprintf(csis, "  Total number checks:       %d\n", numCheck);
    fprintf(csis, "  Total amount checks: %.2lf\\nn", amtCheck);
    fprintf(csis, " Total service charge:   %.2lf\n\n", service);
    fprintf(csis, "      Opening balance:  %.2lf\n", openBalance);
    fprintf(csis, "      Closing balance:  %.2lf\n", closeBalance);
}

txtファイル

I 478.83
D 127.45
D 619.84
C 945.12
C 4.76
D 32.81
C 1.06
D 184.32
C 495.18
C 141.81
C 255.10
D 250.00
D 123.88
D 245.05
D 873.25
C 981.12
D 317.84
C 812.73
D 606.12
私のアウトプット
Transaction         Deposit         Check         Balance
-----------         -------         -----         -------
Initial Balance                                      478.83
Deposit               127.45                       606.28
Deposit               747.29                      1226.12
Check                            945.12          281.00
Check                            949.88          276.24
Deposit               780.10                       309.05
Check                            950.94          307.99
Deposit               964.42                       492.31
Check                           1446.12           -2.87
Check                           1587.93         -144.68
Check                           1843.03         -399.78
Deposit              1214.42                      -149.78
Deposit              1338.30                       -25.90
Deposit              1583.35                       219.15
Deposit              2456.60                      1092.40
Check                           2824.15          111.28
Deposit              2774.44                       429.12
Check                           3636.88         -383.61
Deposit              3380.56                       222.51

Total number deposits:      10
Total amount deposits: 3380.56

Total number checks:       8
Total amount checks: 3636.88

Total service charge:   23.78

Opening balance:  478.83
Closing balance:  198.73
答えアウトプット
Transaction         Deposit         Check         Balance
-----------         -------         -----         -------
Initial Balance                                      478.83
Deposit               127.45                       606.28
Deposit               619.84                      1226.12
Check                            945.12          281.00
Check                              4.76          276.24
Deposit                32.81                       309.05
Check                              1.06          307.99
Deposit               184.32                       492.31
Check                            495.18           -2.87
Check                            141.81         -144.68
Check                            255.10         -399.78
Deposit               250.00                      -149.78
Deposit               123.88                       -25.90
Deposit               245.05                       219.15
Deposit               873.25                      1092.40
Check                            981.12          111.28
Deposit               317.84                       429.12
Check                            812.73         -383.61
Deposit               606.12                       222.51

Total number deposits:      10
Total amount deposits: 3380.56

Total number checks:       8
Total amount checks: 3636.88

Total service charge:   23.78

Opening balance:  478.83
Closing balance:  198.73

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • unz.hori

    2018/04/16 14:56

    deposit/check関数で出力しているものをamtDeposit/amtCheckにしてみたらどうでしょうか?

    キャンセル

  • Masaki21

    2018/04/16 15:08

    できました。ありがとうございました。

    キャンセル

  • unz.hori

    2018/04/16 15:10

    ご自分で回答を書いて解決済みにしてください。

    キャンセル

回答 1

checkベストアンサー

0

出力結果の差分を見てみると、違っているところはDepositCheckの列の値ですね。
「答えアウトプット」の内容から推測すると、ここに出力する値は、ファイルから読み込んだ値そのものです。
しかし現在出力しているものは、加算したものを出力しているようです。

    // amtDepositを出力している
    printf("Deposit\t\t\t %8.2lf\t \t\t\t\t%8.2lf\n", *amtDeposit, *balance);
    fprintf(csis, "Deposit\t\t\t %8.2lf\t \t\t\t\t%8.2lf\n", *amtDeposit, *balance);
~
    // amtCheckを出力している
    printf("Check\t\t\t\t\t\t %9.2lf\t\t%8.2lf\n", *amtCheck, *balance);
    fprintf(csis, "Check\t\t\t\t\t\t %9.2lf\t\t%8.2lf\n", *amtCheck, *balance);


次のように引数で受け取ったものをそのまま出力すればよいように思えます。

    printf("Deposit\t\t\t %8.2lf\t \t\t\t\t%8.2lf\n", *amount, *balance);
    fprintf(csis, "Deposit\t\t\t %8.2lf\t \t\t\t\t%8.2lf\n", *amount, *balance);
~
    printf("Check\t\t\t\t\t\t %9.2lf\t\t%8.2lf\n", *amount, *balance);
    fprintf(csis, "Check\t\t\t\t\t\t %9.2lf\t\t%8.2lf\n", *amount, *balance);

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C

    3963questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。