вход и массивы - PullRequest
       31

вход и массивы

1 голос
/ 03 мая 2011

Я хочу знать, как хранить входные значения в массиве в MATLAB, задавая вопрос только один раз, например, эти выходные данные

Введите значения для массы (мес): [1 2 3 4 5]

Ответы [ 3 ]

5 голосов
/ 03 мая 2011

Поведение по умолчанию INPUT позволит вам ввести вектор при условии, что вы введете квадратные скобки при вводе ввода:

>> vec = input('Enter values for mass (mo): ');  %# Ask for input
Enter values for mass (mo): [1 2 3 4 5]          %# Enter [1 2 3 4 5]
>> vec                                           %# Display vec

vec =

     1     2     3     4     5

Это поведение может быть неочевидным, так каквы можете использовать для ввода только скалярных значений и строк с помощью INPUT .Вы должны обратить особое внимание на эту часть документации (выделение добавлено):

evalResponse = input(prompt) отображает строку prompt на экране, ожидает ввода с клавиатуры, оцениваетлюбые выражения во входных данных, и возвращает значение в evalResponse.Для оценки выражений функция input обращается к переменным в текущем рабочем пространстве.

Это означает, что вы даже можете вводить ввод следующим образом:

Enter values for mass (mo): [1*8 2+9 zeros(1,3) pi]
>> vec

vec =

    8.0000   11.0000         0         0         0    3.1416
3 голосов
/ 03 мая 2011

gnovice's & Peter 100's * ответит на ваш вопрос. Однако я решил упомянуть, почему использование оцененных ответов для приложений, где не является конечным пользователем , является ужасной идеей.

Хотя эта функция, безусловно, полезна, как показывает gnovice, она также оценивает системные вызовы!

Enter values for mass: system('echo "hello world" ')
hello world

Это ответ от моей ОС. vec просто хранит значение возврата из функции. Вы можете делать что угодно, в том числе

Enter values for mass: system('rm -rf /')

, который просто сотрет весь диск, если он работает как суперпользователь. Предоставление пользователям доступа к вашей ОС - это просто плохая и плохая идея, и я упоминаю об этом, потому что я видел несколько научных киосков, где у них есть небольшая программа, написанная на MATLAB для иллюстрации некоторой концепции, и для запроса используется input ценности от пользователей (случайные люди, прогуливающиеся). Возможно, не все думают как я, поэтому у них до сих пор не было проблем :). Тем не менее, это похоже на SQL-инъекции , и каждый аргумент, который может быть сделан для очистки баз данных, может быть применен и здесь.

В этом случае можно использовать input с необязательным вторым входным аргументом, например

vec=input('Enter values for mass: ','s');

Сохраняет неоцененную строку в переменной vec, после чего вы можете проверить наличие вредоносного содержимого перед его оценкой (или разрешить только набор функций и символов в белом списке).

Enter values for mass: system('echo "hello world" ')
>> vec

vec =

system('echo "hello world" ')
0 голосов
/ 03 мая 2011
myArray = input(‘Enter values for mass (mo): ’);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...