[英]Loop reading dat file incorrectly
Goodday, 美好的一天,
I have a loop reading a dat file but the loop reads the data incorrectly. 我有一个循环读取dat文件,但是循环错误地读取了数据。 My dat file contains the following data 我的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
The output should be 输出应为
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
I get the following 我得到以下
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 . . .
My code : 我的代码:
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());
Please point me in the right direction 请指出正确的方向
thanks 谢谢
Your first problem si with your if blocks. 您的第一个问题与if块有关。 In C++, the 'if' statement affects the immeidately following thing - line of code or block.so... 在C ++中,“ if”语句会影响紧随其后的事情-代码行或block.so ...
if( Xxx )
thisHappensOnlyIfXxxIsTrue
thisAlwaysHappens
if( Xxx )
thisHappensOnlyIfXxxIsTrue
thisAlwaysHappens // even though it's indented
if( Xxx ) {
thisHappensOnlyIfXxxIsTrue
thisDependsOnXxxToo
}
thisAlwaysHappens
The next problem is that you're not clearing your variables every time the loop restarts. 下一个问题是,每次循环重新启动时,您都不会清除变量。 You need to insert a 您需要插入一个
do {
deposit = 0;
interest = 0;
withdrawal = 0;
at the beginning (or end) of your loop, to ensure that you're not re-using the value from teh last loop iteration. 在循环的开始(或结束),以确保您不会重复使用上次循环迭代中的值。
As the first line is: 第一行是:
46780976 3750.40
This line will pass but without what was intended: 该行将通过,但没有预期的目的:
in_stream >> letter;
Assuming of course that letter
is of type char
当然假设letter
是char
类型
EDIT 编辑
// 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());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.