2015-03-25 67 views
0

我的程序有一些涉及我的默认语句的打嗝。虽然经历代码 ,我的情况下,似乎被跳过,导致看起来是这样的,而不是仅仅从“帐号”下的数据输出,而不会出现错误评论为什么默认情况下会在从文件输入的情况下评估?

Error! INVALID TRANSACTION CODE! 
Error! INVALID TRANSACTION CODE!  
Error! INVALID TRANSACTION CODE! 
Error! INVALID TRANSACTION CODE! 
Error! INVALID TRANSACTION CODE! 
Error! INVALID TRANSACTION CODE! 
Error! INVALID TRANSACTION CODE! 
Account Number: 467343 
Beginning Balance: $23750.4 
Ending Balance: $2075.4 
Interest Paid: $150 
Amount Deposited: $6000 
Number of Deposits: 3 
Amount Withdrawn: $21825 
Number of Withdrawls: 5

,如果我的输出是罚款拿出我的默认值,但如果事务代码不是有效的字母,我仍然需要它作为失败保险箱。如何在不取消默认的情况下解决这个问题?

这是以下代码的文件和摘要。

467343 23750.40 
W 250.00 
D 1200 
W 75.00 
I 120.74 
W 2500.00 
W 3000 
D 800 
I 30.88 
W 16000.00 
D 4000.00
inFile >> transCode >> transAmount; 

while (!inFile.eof()) 
{ 
    switch (transCode) 
    { 

    case 'D': 
    case 'd': 

     acctBalance = endingBalance + transAmount; 

     amountDeposited = transAmount + amountDeposited; 
     numberOfDeposits++; 

     break; 

    case 'I': 
    case 'i': 

     endingBalance = endingBalance + transAmount; 

     interestPaid = interestPaid + transAmount; 

     break; 

    case 'W': 
    case 'w': 

     endingBalance = endingBalance - transAmount; 
     amountWithdrawn = amountWithdrawn + transAmount; 

     numberOfWithdrawls++; 

     if (endingBalance < minimumBalance && !isServiceChared) 
     { 

      endingBalance = endingBalance - serviceCharge; 

      isServiceChared = true; 
     } 
     break; 

    default: 
     cout << "Error! INVALID TRANSACTION CODE!" << endl; 
     break; 

    } 

    inFile >> transCode >> transAmount; 
+2

'while(!inFile.eof())'是代码异味 - 代码输入'transCode'在哪里? – 2015-03-25 04:39:16

+0

@TonyD我道歉。我添加了inFile >> transCode >> transAmount;它在while循环之前和最后一个括号之后。 – user3656280 2015-03-25 14:33:32

+2

@Tony:这是 2015-03-25 14:38:31

回答

0

我认为transCodechar,所以在文件(467343 23750.40)的第一行它被设置为4然后transAmount被设置为字,67343的其余部分。然后在下一循环transCode被设置为下一个字符,这是223570.40开始,transAmount被设置为3570.40

你需要像做阅读就行第一个字为一个字符串,然后,看看它是一个有效的代码或数字。或者您可以阅读transCode并在阅读transAmount之前检查它。

+0

我也尝试过相同的可能性,但它并没有解释这么多的“默认”消息的副本 – 2015-03-25 14:50:44

+0

@TonyD,不会设置流的'failbit'当试图将'W'作为double读取,并且之后不更新'transCode',所以它只是在相同的错误上循环?在任何情况下,'inFile >> transCode >> transAmount'都非常脆弱,无法处理一行中的意外数量的字段或意外格式的字段 – 2015-03-25 14:52:18

+1

我的想法是,如果'transC ode'是一个char和transAmount一个double或float,那么第一行分解为4/67343,然后是2/3750.40,然后其他行也被成功解析... badbit永远不会设置和eof到达。无论如何,你对MCVE的评论是关于金钱的。 – 2015-03-25 14:57:41

相关问题