Arti-Jack
@Arti-Jack

Почему неправильно отображается строка DOM-элемента?

Пишу калькулятор, написал скрипт, который принимает инфиксную запись в таком формате: 10 - 2 * 2 (с пробелами между операндами и операторами).

Схема алгоритма такая:
1. Сначала берётся строка с экрана калькулятора
2. Создаётся постфиксная запись этого выражения
3. Считается выражение этой постфиксной нотации

Так же имею следующий код, который отвечает за пользовательский ввод на экран калькулятора:
function write(symbol) {
    var last = document.getElementById('output').outerText;
    if (last == 0 && last != "0.") {
        document.getElementById('output').innerText = symbol;
    } else if (symbol == "+" || symbol == "-" || symbol == "*") {
        var str = last + " " + symbol + " \0 "
        document.getElementById('output').innerText = str;
    } else {
        document.getElementById('output').innerText = last + symbol;
    }
}


Просто, чтобы были пробелы между операторами и операндами, пришлось использовать символ пустой маски (" \0").

Но вот что происходит на деле:
5a1d1d7b9177d355036616.png
Он не принимает постфиксную строку на вход моей ф-ции, которая считает по постфиксной нотации выражение
// Calculate via postfix notation
function rpn(input) {
    var ar = input.split(/\s+/), st = [], token;
    while (token = ar.shift()) {
        if (token == +token) {
            st.push(token);
        } else {
            var n2 = st.pop(), n1 = st.pop();
            var re = /^[\+\-\/\*]$/;
            if (n1 != +n1 || n2 != +n2 || !re.test(token)) {
                throw new Error('Invalid expression: ' + input);
            }
            st.push(eval(n1 + token + ' ' + n2));
        }
    }
    if (st.length !== 1) {
        throw new Error('Invalid expression: ' + input);
    }
    return st.pop();
}


Да и вообще, у меня со строкой, которая взята с экрана ввода (DOM-HTML элемент) явно что-то не то - на блокноте отображается только первый символ. И да, я понимаю, что кальк крашится из-за эксепшона, но я не могу понять почему - строка же на вид валидная:
5a1d1e7b73433441110627.png

Никак не понимаю вообще, что происходит. Ведь сам мой алгоритм по отдельности работает (только не забывайте про пробелы между символами!): https://jsfiddle.net/mzp7w7L7/1/
Ну и весь код этого калькулятора тут.
  • Вопрос задан
  • 215 просмотров
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
пришлось использовать символ пустой маски (" \0").
WTF?
leuUSrq.png
Внезапно, да?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы