简体   繁体   中英

How do I prevent this loop? C++

I'm new to C++ and stack overflow in general so please excuse me if a make a mistake somewhere. I posted my code down below, but my issue is that when I type either yes or no at after the calculation is complete, no is supposed to end the program (which I was still working on) and yes is supposed to set it up for another calculation.

However I end up with a glitchy loop.

#include "stdafx.h"
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    bool b;
    bool yes = b;
    do {
        float x;
        float y;
        float z;
        float a;
        cout << "Enter The amount you are investing:" << endl;
        cin >> x;
        cout << "Enter the rate:" << endl;
        cin >> y;
        cout << "Enter the investment period (years):" << endl;
        cin >> z;
        cout << "Enter the compounding period:" << endl;
        cin >> a;
        cout << pow((1 + y / a), (a*z))*x << endl << "Want to do another? (yes/no)";
        cin >> b;
        cin.ignore();

    } while (yes = true); {
        cin.clear();
        if (b = yes) {
        }
        else {
            }
        }
        return 0;
    }

The behaviour of your code is probably due to:

  • unintentional reassignment of the termination condition bool value: yes to: true , instead of checking its value, which is done with == , not with the assignment = .

  • no modification of the value yes within the while loop.

A possible update is:

#include "stdafx.h"
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    // initialise the sentinel
    bool yes = true;

    do {
        // define variables
        float x, y, z, a;

        // read input
        cout << "Enter The amount you are investing:" << endl;
        cin >> x;
        cout << "Enter the rate:" << endl;
        cin >> y;
        cout << "Enter the investment period (years):" << endl;
        cin >> z;
        cout << "Enter the compounding period:" << endl;
        cin >> a;
        cout << pow((1 + y / a), a * z) * x << endl;

        // redo calculation or exit
        cout << "Want to do another? (yes/no)";
        cin >> yes;

        // check termination condition
    } while (yes == true);

    return 0;
}

Additionally, watch out for the uninitialised variables: x , y , z , a and think for a proper default value that will indicate possible wrong result.

Lastly, withing the calculation: 1 + y / a is ambiguous, it could mean both: (1 + y) / a and: 1 + (y / a) , put parentheses to enforce precedence in the wanted order.

You are not modifying the value of variable yes . It is always set to true .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM