循环失败

时间:2015-03-25 02:49:31

标签: c++ visual-c++

我需要让程序循环,直到用户输入" XXXX"作为名字。问题是,我的代码最多只循环一次并退出。我已经尝试过做一整天......而且似乎无法解决这个问题,但我觉得我真的非常接近!

修改 你们真棒!做了两个更改但现在它跳过了名称提示并直接进入存款提示。如何让它在循环中包含名称提示?

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

int main() {

string name, XXXX;
float deposit, time, interest, total, totinterest;
int compound;

cout << left;

int flag = 0;

do {

    cout << "Enter your name or XXXX to stop: ";
    getline(cin, name);
    cout << name << " enter the following information: " << endl;


    if (name == "XXXX"){
        flag = 1;
    }else 
    {

        cout << setw(60) << "\tAmount on deposit: ";
        cin >> deposit;
        if (!deposit || deposit < 0){
            cout << "\tPlease enter a positive number! ";

        }

        cout << setw(60) << "\tYears on deposit: ";
        cin >> time;
        if (!time || time < 0){
            cout << "\tPlease enter a positive number! ";
            return(0);
        }

        cout << setw(60) << "\tNumber of times the interest is compounded per year: ";
        cin >> compound;
        if (!compound || compound < 0){
            cout << "\tPlease enter a positive number! ";
            return(0);
        }

        if (time >= 5)
            interest = .045;
        else if (time >= 4)
            interest = .04;
        else if (time >= 3)
            interest = .035;
        else if (time >= 2)
            interest = .025;
        else if (time >= 1)
            interest = .02;
        else if (time < 1)
            interest = .015;

        total = (deposit)*pow((1 + interest / compound), (compound * time));
        totinterest = total - deposit;

        cout << left << setprecision(2) << fixed;
        cout << endl;
        cout << setw(15) << "Name " << setw(14) << "Years" << setw(18) << "Deposit Amount" << setw(18) << "Interest Earned " << setw(18) << "Total" << endl;
        cout << "===============================================================================" << endl;
        cout << setw(15) << name << setw(14) << time << setw(1) << "$" << setw(17) << deposit << setw(1) << "$" << setw(17) << totinterest << setw(1) << "$" << setw(18) << total << endl;
        cout << endl;
        cout << "Thank you for using tax program. Have a nice day. " << endl;
        return(0);

    }

} while (flag = 0);

}

6 个答案:

答案 0 :(得分:5)

return(0)会让你走出主力。删除该行并重试。

答案 1 :(得分:5)

return(0)将退出main(),程序将终止。因此,将其从源中删除。

while (flag = 0)中的条件也将始终返回false。将其更改为while (flag == 0)否则会导致循环仅迭代一次

最后,<math.h>函数需要pow()

#include <math.h>

答案 2 :(得分:4)

因为您在=条件下使用的是==而不是while

flag = 0更改为!flagflag==0

除此之外,你有return 0这是无条件的。无论如何,这个return语句将使程序退出。

答案 3 :(得分:3)

你必须包括

#include <math.h> 

让你的战俘功能发挥作用。我得到一个没有定义pow的错误。

答案 4 :(得分:3)

首先,你想要你的状态 while(flag == 0)而非while (flag = 0)

此外,如果用户输入无效的时间或存款或复合值(例如小于0),则您的代码会输出错误消息并退出。相反,您希望在那里放置一个while循环,只要它们不断输入错误,就会一直提示用户输入有效信息。

最后,您希望使用myString.compare(otherString)而不是==运算符

答案 5 :(得分:2)

你的else子句中有return(0);。此外,在while循环中有=而不是==,这在(删除return语句之后)是无限循环的配方。