0

再会,

我有一个循环读取 dat 文件,但循环读取数据不正确。我的 dat 文件包含以下数据

46780976 3750.40
W 250.00
D 1200.00
W 75.00
W 375.00
D 1200.00
I 5.50
W 400.00
W 600.00
D 450.50
W 35.65

输出应该是

Account number: 46780976
Opening balance: R3750.40

Transaction    Amount    Balance Bank costs
Withdrawal     250.00    4000.00
Deposit       1200.00Ct  2800.00
Withdrawal        75.00  2725.00
Withdrawal      1375.00   1350.00
Deposit        1200.00Ct 1550.00
Interest         5.50    1555.50
Withdrawal      400.00   1155.50
Withdrawal      600.00   555.50     25.00
Deposit         450.00Ct 1005.50
Withdrawal       35.65    969.85
Banking costs    25.00    969.60

Closing balance: R969.60

我得到以下

Account number : 46780976

Opening Balance : R 3750.4

Transaction        Amount          Balance         Bank Costs


Withdrawal            250            3500.4
Deposit            0 Ct            3500.4
Interest              0            3500.4

Withdrawal            250            3225.4
Deposit            1200 Ct            4425.4
Interest              0            4425.4

Withdrawal            75            4325.4
Deposit            1200 Ct            5525.4
Interest              0            5525.4

Withdrawal            375            5125.4
Deposit            1200 Ct            6325.4
Interest              0            6325.4

Withdrawal            375            5925.4
Deposit            1200 Ct            7125.4
Interest              0            7125.4

Withdrawal            375            6725.4
Deposit            1200 Ct            7925.4
Interest              5.5            7930.9

Withdrawal            400            7505.9
Deposit            1200 Ct            8705.9
Interest              5.5            8711.4

Withdrawal            600            8086.4
Deposit            1200 Ct            9286.4
Interest              5.5            9291.9

Withdrawal            600            8666.9
Deposit            450.5 Ct            9117.4
Interest              5.5            9122.9

Withdrawal            35.65            9062.25
Deposit            450.5 Ct            9512.75
Interest              5.5            9518.25

Withdrawal            35.65            9457.6
Deposit            450.5 Ct            9908.1
Interest              5.5            9913.6
Bank Costs           25            9888.6            25


Closing Balance : R 9888.6
Press any key to continue . . .

我的代码:

do { 
   in_stream >> letter;

if (letter == 'W')

    in_stream >> withdrawal;
    openBalance -= withdrawal;
    cout << "\nWithdrawal" << "            "<< withdrawal << "            " << openBalance << endl;
    out_stream << withdrawal;

if (letter == 'D')

    in_stream >> deposit;
    openBalance += deposit;
    cout << "Deposit" <<"            "<< deposit <<" Ct" <<"            " << openBalance << endl;
    out_stream << deposit;


if (letter == 'I')

    in_stream >> interest;
    openBalance += interest;
    cout << "Interest" <<"              "<< interest <<"            " << openBalance << endl;
    out_stream << interest;

 if (openBalance < 1000)
     cout << "Bank Costs" <<"           "<< bankCost <<"            " << openBalance <<"            " << bankCost << endl;
    openBalance -= bankCost;
    out_stream << bankCost;

} while(!in_stream.eof());

请指出我正确的方向

谢谢

4

2 回答 2

2

你的第一个问题是你的 if 块。在 C++ 中,'if' 语句会影响紧随其后的事物 - 代码行或 block.so...

if( Xxx )
    thisHappensOnlyIfXxxIsTrue
thisAlwaysHappens

if( Xxx )
    thisHappensOnlyIfXxxIsTrue
    thisAlwaysHappens  // even though it's indented


if( Xxx ) {
    thisHappensOnlyIfXxxIsTrue
    thisDependsOnXxxToo
}
thisAlwaysHappens

下一个问题是每次循环重新启动时都不会清除变量。你需要插入一个

do {
   deposit = 0;
   interest = 0;
   withdrawal = 0;

在循环的开头(或结尾),以确保您没有重新使用上一次循环迭代中的值。

于 2013-02-17T01:55:41.027 回答
1

因为第一行是:

46780976 3750.40

这条线会通过,但没有预期的效果:

in_stream >> letter;

假设当然letter是类型char

编辑

// You need to read in the initial values here

do { 
   in_stream >> letter;

if (letter == 'W')
{
    in_stream >> withdrawal;
    openBalance -= withdrawal;
    cout << "\nWithdrawal" << "            "<< withdrawal << "            " << openBalance << endl;
    out_stream << withdrawal;
}

if (letter == 'D')
{
    in_stream >> deposit;
    openBalance += deposit;
    cout << "Deposit" <<"            "<< deposit <<" Ct" <<"            " << openBalance << endl;
    out_stream << deposit;
}

if (letter == 'I')
{

    in_stream >> interest;
    openBalance += interest;
    cout << "Interest" <<"              "<< interest <<"            " << openBalance << endl;
    out_stream << interest;
 }

 if (openBalance < 1000)
 {
     cout << "Bank Costs" <<"           "<< bankCost <<"            " << openBalance <<"            " << bankCost << endl;
    openBalance -= bankCost;
    out_stream << bankCost;
  }

} while(!in_stream.eof());
于 2013-02-17T01:53:31.323 回答