# Thread: Do-while loop and returning different results if string or integer?

1. Registered User
Join Date
Apr 2014
Posts
44

## Do-while loop and returning different results if string or integer?

I'm learning about do-while statements in my javascript class right now. I have this jumbled mess at the moment:

PHP Code:
``` //declare and initialize the finalTotal variable and input tally var finalTotal = 0; var inputTotal = 0; do { //take input from the user (will happen at least once) var input = parseInt(prompt("Let's add numbers! Enter a Number to Add. When you're done, type 'quit'.", "Enter A Number")); if (isNaN(input)) { //give a message to user if input is invalid document.writeln("<p>Try again! We are looking for numbers to add. Type 'quit' if you're finished.</p>"); } else {     var finalTotal = (input + finalTotal);     inputTotal++;     } } while (input != "quit"); document.writeln("<p>You've finished! You're final tally is: " + finalTotal + ". You inputed " + inputTotal + " numbers. You can do more than that, can't you?</p>");  ```
Now, I know I have a couple problems here. One, I have the parseInt on the prompt, so they can't enter anything but a number. But, I need them to be able to type "quit" and have the sequence end. So, somehow I need to be able to have them put in numbers and the "do" cycle keeps going, but if they type any word except quit, it returns as NaN and goes back to the start. Then, once they type "quit", the sequence ends and prints the results.

I'd appreciate any help on this. Thanks!

2. That sure is a nasty little loop. It seems like simply moving your parseInt() down to the line where you make your addition calculation is the easiest solution.
Code:
```//declare and initialize the finalTotal variable and input tally
var finalTotal = 0;
var inputTotal = 0;
do {
//take input from the user (will happen at least once)
var input = prompt("Let's add numbers! Enter a Number to Add. When you're done, type 'quit'.", "Enter A Number");

if(isNaN(input)) {
//give a message to user if input is invalid
document.writeln("<p>Try again! We are looking for numbers to add. Type 'quit' if you're finished.</p>");
} else {
var finalTotal = (parseInt(input) + finalTotal);
inputTotal++;
}
} while (input.toLowerCase() != "quit");

document.writeln("<p>You've finished! You're final tally is: " + finalTotal + ". You input " + inputTotal + " numbers. You can do more than that, can't you?</p>");```
I also added a toLowerCase() on the check for 'quit' as a precaution. In all reality though you'd probably want to use something else like
while(input.toLowerCase().indexOf("quit") >= 0);
as this would catch any weird variations or statements with the word 'quit' in them.

3. Registered User
Join Date
Apr 2014
Posts
44
That works wonders for making sure the calculation works! However, I'm actually running into a totally different problem now. I run the page, input a couple of numbers, and then type quit. The bottom equation works well, but no matter what I do, it prints the "Try Again! We are looking..." portion. Even if I just put in "1" and "2" and then type "quit", it always writes the error message (for NaN(input)) on the final page.

Anyone know why that is?

4. My guess is the do() part of the loop runs one full time with each new input, and is only evaluated at the very end when deciding if the loop should continue. Thus typing 'quit' still runs through the loop, prints the message and finally gets evaluated by while() (which tells it to exit).

So the solution would be to add a check to see if it matches the exit criteria and then force a break. Something like:
Code:
```//declare and initialize the finalTotal variable and input tally
var finalTotal = 0;
var inputTotal = 0;
do {
//take input from the user (will happen at least once)
var input = prompt("Let's add numbers! Enter a Number to Add. When you're done, type 'quit'.", "Enter A Number");
if(input.toLowerCase().indexOf("quit") >= 0) break;

if(isNaN(input)) {
//give a message to user if input is invalid
document.writeln("<p>Try again! We are looking for numbers to add. Type 'quit' if you're finished.</p>");
} else {
var finalTotal = (parseInt(input) + finalTotal);
inputTotal++;
}
} while(input.toLowerCase().indexOf("quit") >= 0);

document.writeln("<p>You've finished! You're final tally is: " + finalTotal + ". You input " + inputTotal + " numbers. You can do more than that, can't you?</p>");```
This should prevent it from displaying the message as the loop will exit the current instance right after the value is input.

5. Registered User
Join Date
Apr 2014
Posts
44
That worked famously! Thank you so much!

6. Registered User
Join Date
Mar 2014
Posts
19
Looks like tis sorted. Well done :-)

There are currently 1 users browsing this thread. (0 members and 1 guests)

#### Posting Permissions

• You may not post new threads
• You may not post replies
• You may not post attachments
• You may not edit your posts
•

"

"

## X vBulletin 4.2.2 Debug Information

• Page Generation 0.10792 seconds
• Memory Usage 2,902KB
• Queries Executed 15 (?)
Template Usage (34):
• (2)bbcode_code
• (1)bbcode_php
• (1)footer
• (1)forumjump
• (1)forumrules
• (1)gobutton
• (6)memberaction_dropdown
• (1)navbar
• (1)navbar_moderation
• (1)navbar_noticebit
• (1)navbar_tabs
• (2)option
• (6)postbit
• (6)postbit_onlinestatus
• (6)postbit_wrapper
• (1)spacer_close
• (1)spacer_open
• (1)tagbit_wrapper

Phrase Groups Available (6):
• global
• inlinemod
• postbit
• posting
• reputationlevel
Included Files (26):
• ./global.php
• ./includes/class_bootstrap.php
• ./includes/init.php
• ./includes/class_core.php
• ./includes/config.php
• ./includes/functions.php
• ./includes/class_friendly_url.php
• ./includes/class_hook.php
• ./includes/class_bootstrap_framework.php
• ./vb/vb.php
• ./vb/phrase.php
• ./includes/functions_calendar.php
• ./includes/functions_bigthree.php
• ./includes/class_postbit.php
• ./includes/class_bbcode.php
• ./includes/functions_reputation.php
• ./includes/functions_notice.php
• ./packages/vbattach/attach.php
• ./vb/types.php
• ./vb/cache.php
• ./vb/cache/db.php
• ./vb/cache/observer/db.php
• ./vb/cache/observer.php

Hooks Called (70):
• init_startup
• friendlyurl_resolve_class
• init_startup_session_setup_start
• database_pre_fetch_array
• database_post_fetch_array
• init_startup_session_setup_complete
• global_bootstrap_init_start
• global_bootstrap_init_complete
• cache_permissions
• fetch_foruminfo
• global_state_check
• global_bootstrap_complete
• global_start
• style_fetch
• global_setup_complete
• strip_bbcode
• friendlyurl_clean_fragment
• friendlyurl_geturl
• forumjump
• cache_templates
• cache_templates_process
• template_register_var
• template_render_output
• fetch_template_start
• fetch_template_complete
• parse_templates
• notices_check_start
• notices_noticebit
• process_templates_complete
• friendlyurl_redirect_canonical
• bbcode_fetch_tags
• bbcode_create
• postbit_factory
• postbit_display_start
• postbit_imicons
• bbcode_parse_start
• bbcode_parse_complete_precache
• bbcode_parse_complete
• postbit_display_complete
• memberaction_dropdown
• tag_fetchbit_complete
• forumrules
• navbits
• navbits_complete