用户输入数字对,直到输入 "quit",哨兵不工作?

user to enters pairs of numbers until they enter "quit", sentinel not working?

这是我要解决的问题: 编写一个程序,要求用户输入一对数字,直到他们输入 "quit"。在输入并验证每对数字后,使用函数添加数字。该函数将为一对数字提供两个参数,并将 return 总和。用户输入"quit"后,输出所有的数字对及其和。

当我只做一个时,我有输出数字 1、数字 2 和总和的程序,但是当我尝试重复直到用户输入时 "quit" 我似乎打破了它?

//function to sum 2 entered numbers
function sum2enteredNumbers(number1, number2) 
{
    var sum1and2;
    sum1and2 = number1 + number2;
    return sum1and2;
}


function exercise4Part1() {
    // PART 1: YOUR CODE STARTS AFTER THIS LINE
    var QUIT_CODE = "quit";
    var output;
    var number1;
    var number2;

    while (number1 !== QUIT_CODE || number2 !== QUIT_CODE)
    {
    number1 = Number(prompt("Enter a number:"));
    number2 = Number(prompt("Enter another number:"));     
    }


    sum1and2 = sum2enteredNumbers(number1, number2);

    output = document.getElementById('outputPart1');

    output.innerHTML = "<br />Entry 1: " + number1 + " Entry 2: " + number2 + " Sum: " + sum1and2;

}

尝试 2--仍然无效:

function sum2enteredNumbers(number1, number2) 
{
    var sum1and2;
    sum1and2 = number1 + number2;
    return sum1and2;
}


function exercise4Part1() {
    // PART 1: YOUR CODE STARTS AFTER THIS LINE
    var QUIT_CODE = "quit";
    var output;
    var number1;
    var number2;


    while (number1 !== QUIT_CODE && number2 !== QUIT_CODE)
    {
        number1 = prompt("Enter a number or \"quit\":");
        number2 = prompt("Enter another number or \"quit\":"); 
        if (number1 !== QUIT_CODE && number2 !== QUIT_CODE)
        {
         number1 = Number(number1);
         number2 = Number(number2);
        }
    }

    sum1and2 = sum2enteredNumbers(number1, number2);

    output = document.getElementById('outputPart1');

    output.innerHTML = "<br /> Entry 1: " + number1 + " Entry 2: " + number2 + " Sum: " + sum1and2;

}

从概念上讲,您想这样做:

  1. 获取用户输入,
    • 如果任何时候输入是"quit",则停止。 (哨兵检查)
  2. 执行加法运算,
  3. 输出,
  4. 重复。

对于第 1 步,您已完成大部分操作。考虑这个函数:

function getInput(msg) { 
    var value = prompt(msg); 
    if (value === QUIT_CODE) { 
         return false; 
    }
    return value; 
}

然后您可以在 while 条件下调用此函数,同时仍将输入分配给 number1number2

while ((number1 = getInput('Enter a number')) &&
       (number2 = getInput('Enter another number'))) { 
    // convert and output 
}

为什么这行得通?

  • &&, || ,即 JavaScript 的逻辑布尔运算符短路,这意味着如果第一个操作数不计算第二个操作数,则条件将为 false && 的操作数为 false,如果第一个操作数是 true.
  • ,则条件将为 true 而无需计算第二个操作数
  • 人们通常会认为 0 在 JavaScript 中是错误的,这会导致 while 条件失败并且如果用户输入 0 则不起作用。但是在这种情况下,输入的来源是一个字符串,表达式 '0' 为真。