### Inches to centimeters loop

So I'm supposed to write a program that prompts a user for a two numbers within 36 inches of each other.

Use a for loop as a timer.

An outer Do While Loop that will ask the User if they wish to run the program again.
An inner For Loop structure that will:
a. Initialize the For Loop counter to the beginning value entered by the User
b. Update the counter by incrementing it by six
c. Test the counter by comparing it to the ending value entered by the User
d. The body of the For Loop will use the value of the counter as the inches to convert to centimeters.

The code below is the current version of what I have. My problem is that it doesn't do the conversion and is an infinite loop.

Any help would be appreciated. Thanks!

 ``12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576`` `````` /************************** Compiler Directives **********************/ #include #include #include using namespace std; /**************************** main Function **************************/ int main() { //Local variables int lowNum; int highNum; int counter; int inches; float centimeters; char runAgain; cout << "Enter you low number of inches "; //Ask user for a beginning number cin >> lowNum; cout << "Enter an high number of inches that is within 36 inches of your beginning number "; //Ask user for a ending number cin >> highNum; for (lowNum = counter; lowNum < highNum; lowNum + 6) { (centimeters = (inches * 2.54)); cout << setw(5) << "Inches " < lowNum) { counter = lowNum * 2.54;//inches to centimeters conversion cout << "\n" << setw(5) << lowNum << setw(21) << fixed << showpoint << setprecision(2) << counter; highNum <= lowNum + 36; } } do { cout << "Enter a beginning number of inches "; //Ask user for a beginning number cin >> lowNum; cout << "Enter an ending number of inches that is within 36 inches of your beginning number "; //Ask user for a ending number cin >> highNum; } while (runAgain == 'y' || runAgain == 'Y');//program runs again if y, Y entered { cout << "Enter a beginning number of inches "; //Ask user for a beginning number cin >> lowNum; cout << "Enter an ending number of inches that is within 36 inches of your beginning number "; //Ask user for a ending number cin >> highNum; } (highNum > lowNum + 36); ``````
Last edited on
Hello BIGB185,

I think you missed the closing code tag.

This might be useful:
 PLEASE ALWAYS USE CODE TAGS (the <> formatting button), to the right of this box, when posting code. It makes it easier to read your code and also easier to respond to your post. http://www.cplusplus.com/articles/jEywvCM9/ http://www.cplusplus.com/articles/z13hAqkS/ Hint: You can edit your post, highlight your code and press the <> formatting button. You can use the preview button at the bottom to see how it looks. I found the second link to be the most help.

One of the first things I noticed is in the for loop. It should end with "lowNum += 6)" Otherwise "lowNum" would never change and you would be processing the same number each time through an endless for loop.

Until I straighten out your code it is hard to tell what is what.

Hope that helps for now,

Andy
 ``1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859`` ``````#include #include int main() { // An outer Do While Loop that will ask the User if they wish to run the program again. char again ; do { // prompt user for two numbers within 36 inches of each other. const int MAX_DIFF = 36 ; std::cout << "\nenter two lengths which do not differ by more than " << MAX_DIFF << " inches.\n" ; int lower ; std::cout << "lower length: " ; std::cin >> lower ; int higher ; std::cout << "higher length: " ; std::cin >> higher ; if( lower <= 0 ) std::cout << "error: lengths must be positive.\n" ; else if( higher <= lower ) std::cout << "error: the higher length must be more than the lower length.\n" ; else if( (higher-lower) > MAX_DIFF ) std::cout << "error: the two lengths are not within " << MAX_DIFF << " inches of each other\n" ; else // valid input { // An inner For Loop structure const int INCREMENT = 6 ; // Update the counter by incrementing it by six // print the header std::cout << "\n\n" << std::setw(8) << "inches" << std::setw(15) << "centimeters" << '\n' << std::setw(8) << "------" << std::setw(15) << "-----------" << '\n' ; for( int inches = lower ; // Initialize the For Loop counter to the beginning value inches <= higher ; // Test the counter by comparing it to the ending value inches += INCREMENT // Update the counter by incrementing it by six ) { // use the value of the counter as the inches to convert to centimeters const double MULTIPLIER = 2.54 ; const double centimeters = inches * MULTIPLIER ; std::cout << std::fixed << std::setprecision(2) \ << std::setw(8) << inches << std::setw(15) << centimeters << '\n' ; } // end for loop } // end else valid input std::cout << "\n\nrun the program again (y/n)? " ; std::cin >> again ; } while( again == 'Y' || again == 'y' ) ; // end outer do while loop }``````
Hello BIGB185,

No worries.

As I read the instructions you program should look something like:
 do { cin >> lowNum; cin >> highNum; for (counter = lowNum; counter < highNum; counter += 6) prompt to continue } while (std::toupper(runAgain == 'Y'); // <--- "toupper" needs header file "cctype".

This is just a quick thought for now. What you have is usable. It just needs rearranged in the correct order.

I see you fixed the code tags. Now the proper indenting would help.
 ``123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869`` ``````/************************** Compiler Directives **********************/ #include #include #include using namespace std; /**************************** main Function **************************/ int main() { //Local variables. This msy work, but it is usually a good idea to initialize the variables. int lowNum{}; int highNum{}; int counter{}; int inches{}; float centimeters{}; // <--- "double" would be a better choice. char runAgain{ 'Y' }; // <--- Or could be 'N'. cout << "Enter you low number of inches "; //Ask user for a beginning number cin >> lowNum; cout << "Enter an high number of inches that is within 36 inches of your beginning number "; //Ask user for a ending number cin >> highNum; for (lowNum = counter; lowNum < highNum; lowNum + 6) { (centimeters = (inches * 2.54)); cout << setw(5) << "Inches " << inches << endl; cout << setw(15) << "Centimeters" << centimeters << endl; while (highNum > lowNum) { counter = lowNum * 2.54;//inches to centimeters conversion cout << "\n" << setw(5) << lowNum << setw(21) << fixed << showpoint << setprecision(2) << counter; highNum <= lowNum + 36; } } do { cout << "Enter a beginning number of inches "; //Ask user for a beginning number cin >> lowNum; cout << "Enter an ending number of inches that is within 36 inches of your beginning number "; //Ask user for a ending number cin >> highNum; } while (runAgain == 'y' || runAgain == 'Y');//program runs again if y, Y entered { cout << "Enter a beginning number of inches "; //Ask user for a beginning number cin >> lowNum; cout << "Enter an ending number of inches that is within 36 inches of your beginning number "; //Ask user for a ending number cin >> highNum; } (highNum > lowNum + 36); return 0; }``````

I need to go over the instructions again to make sure I have it correct before I can rework your program.

Hope that helps,

Andy
Thanks, Andy. I'm just a little confused on the order then I guess.
Last edited on
So I've been playing with the code and this is the current version. Unfortunately, it is only computing the beginning number and not incrementing by six. It's also not asking if the user would like to run the program again and it doesn't seem to care if the user enters a number that is greater than 36 inches than the beginning number.

 ``123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869`` ``````/************************** Compiler Directives **********************/ #include #include #include using namespace std; /**************************** main Function **************************/ int main () { //No Local constants float counter = 0; //While Loop counter char runAgain = 'Y'; //ask to run program again //Local variables int beginNum; //beginning number of inches int endNum; //end number of inches int inches; float centimeters; /*************** Begin main Function Executables *****************/ for (counter = beginNum; counter < endNum; counter += 6); do { cout << "Enter a beginning number of inches "; //Ask user for a beginning number cin >> beginNum; cout << "Enter an ending number of inches that is within 36 inches of your beginning number "; //Ask user for a ending number cin >> endNum; } while (endNum < beginNum && endNum >= beginNum + 36); { counter = beginNum * 2.54;//inches to centimeters conversion cout << "\n" << setw(8) << "Inches" << setw(21) << "Centimeters" <<"\n" << "**********" << setw(20) << "*************";//conversion table cout << "\n" << setw(5) << beginNum << setw(21) << fixed << showpoint << setprecision(2) << counter;//information on conversion table } while (runAgain == 'y' || runAgain == 'Y');//program runs again if y, Y entered { cout << "Enter your beginning number: ";//asks user to input the beginning number cin >> beginNum; cout << "Enter an ending number of inches that is within 36 inches of your beginning number "; //Ask user for a ending number cin >> endNum; } return 0; }// end main ``````
Last edited on
My apologies to JLBorges, I didn't see your post before posting again. Your program works. I had to edit it just a touch to fit within what we've done in class so far but I think or at least I hope, I've got it figured out.

Thank you once again, gentleman.
I do have a question though. Does the "const int INCREMENT = 6 ;" bit of code essentially do the job that the "for loop" was supposed to do? Wouldn't that essentially negate the use of the "for loop" as a timer in this instance?

Ben
> Does the "const int INCREMENT = 6 ;" bit of code essentially do the job that the "for loop" was supposed to do?

No. It just declares a constant value which specifies the amount of the increment.

This is the for loop construct; the bolded part increments the loop counter by INCREMENT (6):
 ``1234`` ``````for( int inches = lower ; // Initialize the For Loop counter to the beginning value inches <= higher ; // Test the counter by comparing it to the ending value inches += INCREMENT // Update the counter by incrementing it by six )``````
Thank you, JLBorges.
Topic archived. No new replies allowed.