0

I wrote the following code for a homework problem, but it's stuck in an infinate loop. I'm not sure how to correct that problem. The other issue is I want the answer to be given in two decimal places and not rounded in any way and it appears that my answers are being rounded. Any help would be greatful!

// this program will calculate the salary after a set number of days
// the user will input the number of days to obtain the salary
#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main()
{
	// declare variables
	float n = 0;
    float total = 0;
    float dollaramount = 0;
	
	// prompt user for the number of days 
	cout << "Please enter the number of days to obtain the sum of $0.01 per\n"
    "day that doubles for the amount of days that you input:";
    cin >> n;
    
    while (n >= 1 || n <= 30)
    {
          total = pow(2, n) - 1;
          dollaramount = total/100;
          
          cout << "The total dollar amount will be:" << setprecision (2) 
          << fixed << dollaramount << " on the " << n << " day.";
          
          }
     
     cout << " You entered a number outside of 1 through 30, please\n"
          "start over.";
           
    system ("pause");

	return 0;
}
4
Contributors
4
Replies
5
Views
6 Years
Discussion Span
Last Post by sdgz747
0

while (n >= 1 && n <= 30) since the while loop runs while it's true you want it to cut out when either one of these is false. It's a bit counterintuitive at first.

To solve your other problem, I believe you need

float n = 0f;
float total = 0f;
float dollaramount = 0f;

to specify that those are float constants.

1

In the 'while' condition, you are not changing the 'n' value and that is why it is going in infinite loop.

0

for the infinite loop, while (n >= 1 || n <= 30) so -96 for example is valid because its below or equal to 30 and 5023 is also valid because it is bigger or equal to 1. Because with || (or) only one statement must be true.

to correct that, you must do : while (n >= 1 && n <= 30) like Jonsca said. Because any 'n' must respect both of these boundaries.

on top your 'n' value never changes...

while (n >= 1 || n <= 30)
{
      total = pow(2, n) - 1;
      dollaramount = total/100;

      cout << "The total dollar amount will be:" << setprecision (2) 
      << fixed << dollaramount << " on the " << n << " day.";

u must enter : cin>> n; // to get a new number.

      }

Not sure about rounding off.

Edited by Reverend Jim: Fixed formatting

0

Okay! I finally made it work. In order for me to have a proper decimal number print out, line 14 needed to be set up like this...

double long dollaramount = 0;

I also had to set the precision up properly for the " on day " << n <<, part of the program.

Thanks for all of your help!

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.