Reputation: 33
I'm trying to write a simple program with JavaScript that takes in a number 1 - 100 and displays it with it's letter grade as compared to the American standard of grading. (<50 = F, 60 - 69 = D, 70 = 79 = C, etc...). I am having an issue where the script doesn't register the "STOP" command I put into it and instead, takes it as an invalid input. I want to use "STOP" to break out of the loop and any other NaN entry to throw an Error. Here is my code:
var entry;
var letterGrade;
while(true) {
entry = prompt("Enter number grade from 0 through 100\n" +
"Or enter STOP to end entries", "STOP");
entry = parseInt(entry);
// derive and display the letter grade
if(isNaN(entry)){
if(entry === "STOP"){
letterGrade = 'Q';
}
else{
letterGrade = 'N';
}
}
else if(entry < 0 || entry > 100){
letterGrade = "ERROR";
}
else if(entry < 60){
letterGrade = 'F';
}
else if(entry > 59 && entry < 70){
letterGrade = 'D';
}
else if(entry > 69 && entry < 80){
letterGrade = 'C';
}
else if(entry > 79 && entry < 90){
letterGrade = 'B';
}
else{
letterGrade = 'A';
}
if(letterGrade == 'Q'){
break;
}
else if(letterGrade == 'N'){
alert("ERROR #002: Entry is not a number");
}
else if(letterGrade != "ERROR"){
alert("Number grade = " + entry + "\n"
+ "Letter grade = " + letterGrade);
}
else{
alert("ERROR #001: Invalid Entry");
}
}
Upvotes: 1
Views: 1102
Reputation: 2058
It would be far better practice to use a recursive function here:
function enterGrade() {
// All your other code above and below next line as it is above
if(!isNan(entry)) enterGrade();
}
I can add a bit more code if you don't get what I'm trying to explain.
Upvotes: 0
Reputation: 10572
entry = prompt("Enter number grade from 0 through 100\n" +
"Or enter STOP to end entries", "STOP");
entry = parseInt(entry);
You can't have it both a string value and an integer. Since you reassign entry as an int (or attempt to):
if(isNaN(entry)){
if(entry === "STOP"){
Will never match. You need to rearrange things as such:
var entry;
var letterGrade;
while(true) {
entry = prompt("Enter number grade from 0 through 100\n" +
"Or enter STOP to end entries", "STOP");
// derive and display the letter grade
if(isNaN(entry)){
if(entry === "STOP"){
letterGrade = 'Q';
}
else{
letterGrade = 'N';
}
}
entry = parseInt(entry); // parse to int here
if(entry < 0 || entry > 100){
letterGrade = "ERROR";
}
else if(entry < 60){
letterGrade = 'F';
}
else if(entry > 59 && entry < 70){
letterGrade = 'D';
}
else if(entry > 69 && entry < 80){
letterGrade = 'C';
}
else if(entry > 79 && entry < 90){
letterGrade = 'B';
}
else{
letterGrade = 'A';
}
if(letterGrade == 'Q')
break;
}
Upvotes: 4