Как обновить значения из строк на матрице - PullRequest
0 голосов
/ 27 января 2019

У меня есть матрица: 6 строк x 18 столбцов, и я хочу спросить пользователя, какую строку он хочет изменить на 0, и заставить это произойти, но если он вводит 0, он просто выходит из программы

row = input('Input 0 to exit\n\n Row to eliminate:', 's');
if row ~= 0
    M(row,:) = 0;
    disp(M)
end

Я хочу изменить всю строку ввода на 0, но она каким-то образом создает еще 44 строки ниже исходной матрицы (все 0) и не меняет первые 6 строк (исходную матрицу)

1 Ответ

0 голосов
/ 27 января 2019

row - это символ вектора, а не число.Например, если вы введете «4», переменная содержит символ 4, который имеет числовое значение 52 (код ASCII).Использование этого для индексации создаст строку # 52 и заполнит ее нулями.Чтобы создать эту строку, необходимо также создать промежуточные строки, значения которых по умолчанию равны 0.

Чтобы решить эту проблему, удалите 's' из вызова к input.Это приведет к тому, что возвращаемое значение будет интерпретироваться как выражение MATLAB, а не напрямую возвращать введенный текст в виде вектора символов.

Однако, если есть вероятность, что ваша программа используется злонамеренным пользователем илиглупый пользователь, это решение опасно (как указано @ Luis Mendo в комментарии ), потому что оно оценивает все типы пользователей, что означает, что пользователь может, например, ввести команду, которая стирает ваш жесткий диск.

Более безопасное решение - использовать str2double для преобразования вывода массива char из input в число, которое вы можете использовать для индексации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...