Matlab 输入和数组

Matlab 输入和数组,matlab,Matlab,我想知道如何在MATLAB中通过只问一次这个问题来存储数组中的输入值,比如这个输出 输入质量(mo)值:[1 2 3 4 5]的默认行为将允许您输入向量,前提是在键入输入时包含方括号: >> 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

我想知道如何在MATLAB中通过只问一次这个问题来存储数组中的输入值,比如这个输出

输入质量(mo)值:[1 2 3 4 5]

的默认行为将允许您输入向量,前提是在键入输入时包含方括号:

>> 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
这种行为可能并不明显,因为您可能习惯于只输入标量值和字符串。您必须特别注意文档的这一部分(增加了重点):

evalResponse=输入(提示)
显示 屏幕上的
提示符
字符串等待 对于键盘输入,计算 输入中的任何表达式,和 返回
evalResponse
中的值。到 计算表达式,输入

函数访问
当前工作区

这意味着您甚至可以这样输入:

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

vec =

    8.0000   11.0000         0         0         0    3.1416
的默认行为将允许您输入向量,前提是键入输入时包含方括号:

>> 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
这种行为可能并不明显,因为您可能习惯于只输入标量值和字符串。您必须特别注意文档的这一部分(增加了重点):

evalResponse=输入(提示)
显示 屏幕上的
提示符
字符串等待 对于键盘输入,计算 输入中的任何表达式,和 返回
evalResponse
中的值。到 计算表达式,输入

函数访问
当前工作区

这意味着您甚至可以这样输入:

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

vec =

    8.0000   11.0000         0         0         0    3.1416
&答案解决您的问题。然而,我想我应该提一下,为什么在您不是最终用户的应用程序中使用经过评估的响应是一个糟糕的主意

正如gnovice所展示的那样,虽然该特性确实很有用,但它也会评估系统调用

Enter values for mass: system('echo "hello world" ')
hello world
这是我的操作系统的回应
vec
仅存储函数的退出返回值。你几乎可以做任何事,包括

Enter values for mass: system('rm -rf /')
如果以超级用户身份运行,则只需擦除整个驱动器。允许用户进入你的操作系统是一个非常糟糕的主意,我提到这一点,因为我看到了几个科学亭,他们用MATLAB编写了一些小程序来说明一些概念,并使用
input
从用户那里请求值(随机的人走过)。也许不是每个人都像我一样思考,所以到目前为止他们还没有遇到麻烦:)。然而,这就像是,可以为清理数据库而提出的每一个论点也可以在这里应用

在本例中,解决方法是将
input
与可选的第二个输入参数一起使用,如下所示

vec=input('Enter values for mass: ','s');
这会将未评估的字符串存储到变量
vec
,然后您可以在评估它之前检查恶意内容(或者只允许白名单上的一组函数和字符)

&答案解决您的问题。然而,我想我应该提一下,为什么在您不是最终用户的应用程序中使用经过评估的响应是一个糟糕的主意

正如gnovice所展示的那样,虽然该特性确实很有用,但它也会评估系统调用

Enter values for mass: system('echo "hello world" ')
hello world
这是我的操作系统的回应
vec
仅存储函数的退出返回值。你几乎可以做任何事,包括

Enter values for mass: system('rm -rf /')
如果以超级用户身份运行,则只需擦除整个驱动器。允许用户进入你的操作系统是一个非常糟糕的主意,我提到这一点,因为我看到了几个科学亭,他们用MATLAB编写了一些小程序来说明一些概念,并使用
input
从用户那里请求值(随机的人走过)。也许不是每个人都像我一样思考,所以到目前为止他们还没有遇到麻烦:)。然而,这就像是,可以为清理数据库而提出的每一个论点也可以在这里应用

在本例中,解决方法是将
input
与可选的第二个输入参数一起使用,如下所示

vec=input('Enter values for mass: ','s');
这会将未评估的字符串存储到变量
vec
,然后您可以在评估它之前检查恶意内容(或者只允许白名单上的一组函数和字符)


那么到目前为止你已经尝试了什么?那么到目前为止你已经尝试了什么?