提示用户在 MEX 代码中输入数字
Prompting user to enter number in MEX code
我想知道是否有提示用户在 MEX 代码中输入整数。
类似于 MATLAB 中的输入或 C 中的 scanf
。
我听说过 mexCallMATLAB
及其在
中的使用
str = mxCreateString("Enter extension: ");
mexCallMATLAB(1,&new_number,1,&str,"input");
但是我不太明白 mxCreateString
的意义是什么以及 &str
是做什么的。如果有人能详细说明一下或给我另一种提示用户输入数据的技巧,我将不胜感激。
让我们从头说起。 mexCallMATLAB
在 MEX 代码中调用 MATLAB 函数、用户定义的 MATLAB 函数或 MEX 文件。函数声明是这样的:
int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[],
const char *functionName);
详细参数为:
nlhs
: MATLAB 或 MEX 函数预期产生的输出参数总数。
*plhs[]
:指针数组,其中每个元素都是指向输出参数的指针
nrhs
:MATLAB或MEX函数期望传入的输入参数总数。
*prhs[]
:指针数组,其中每个元素都是指向输入参数的指针。
functionName
:包含函数名的C字符串。
注意 *plhs[]
和 *prhs[]
必须是指向 MEX 类型变量的指针数组。这很重要,因为这将用于了解接下来会发生什么。使用上面的逻辑,看看你引用的 mexCallMATLAB
的调用:
mexCallMATLAB(1,&new_number,1,&str,"input");
我们可以看到,在MATLAB中调用的函数是input
函数,它是一个MATLAB函数,其中输入参数是用于在命令Window中显示的字符串提示符在接收用户输入并将其存储到输出变量之前。请注意,预期的是数值表达式,通常是数字或对数字的一些操作。
示例调用如下所示:
out = input('Enter a number: ');
Enter a number:
将因此显示在命令 Window 中,并且您输入的任何数字都会存储到变量 out
.
中
当使用 mexCallMATLAB
时,您正在执行与上述相同的操作,但在 MEX 代码中调用它。此函数有一个输入参数和一个预期的输出参数。第二个参数在技术上是一个指向输出参数的指针,它是一个只有一个元素的数组。 input
的输出将因此存储在变量 new_number
中,该变量将包含一个数字。 str
变量是使用 mxCreateString
创建的 MEX 字符串。您必须 创建一个 MEX 字符串,因为请记住,要通过 mexCallMATLAB
调用的函数的输入变量的预期输入必须是 MEX 变量。因此,str
是 MEX 字符串,而 &str
是指向 MEX 字符串的指针。从技术上讲,这也是一个包含一个元素的指针数组。
调用此函数后,您将输入数字输入 MATLAB 命令 Window,因此数字将发送回 MEX 并存储到 MEX 代码中的 new_number
。
这似乎是一种从 MATLAB 命令 Window 将变量获取到 MEX 的优雅方法。在我的 MEX 经验中,我没有遇到任何其他方法,所以请继续使用它!
我想知道是否有提示用户在 MEX 代码中输入整数。
类似于 MATLAB 中的输入或 C 中的 scanf
。
我听说过 mexCallMATLAB
及其在
str = mxCreateString("Enter extension: ");
mexCallMATLAB(1,&new_number,1,&str,"input");
但是我不太明白 mxCreateString
的意义是什么以及 &str
是做什么的。如果有人能详细说明一下或给我另一种提示用户输入数据的技巧,我将不胜感激。
让我们从头说起。 mexCallMATLAB
在 MEX 代码中调用 MATLAB 函数、用户定义的 MATLAB 函数或 MEX 文件。函数声明是这样的:
int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[],
const char *functionName);
详细参数为:
nlhs
: MATLAB 或 MEX 函数预期产生的输出参数总数。*plhs[]
:指针数组,其中每个元素都是指向输出参数的指针nrhs
:MATLAB或MEX函数期望传入的输入参数总数。*prhs[]
:指针数组,其中每个元素都是指向输入参数的指针。functionName
:包含函数名的C字符串。
注意 *plhs[]
和 *prhs[]
必须是指向 MEX 类型变量的指针数组。这很重要,因为这将用于了解接下来会发生什么。使用上面的逻辑,看看你引用的 mexCallMATLAB
的调用:
mexCallMATLAB(1,&new_number,1,&str,"input");
我们可以看到,在MATLAB中调用的函数是input
函数,它是一个MATLAB函数,其中输入参数是用于在命令Window中显示的字符串提示符在接收用户输入并将其存储到输出变量之前。请注意,预期的是数值表达式,通常是数字或对数字的一些操作。
示例调用如下所示:
out = input('Enter a number: ');
Enter a number:
将因此显示在命令 Window 中,并且您输入的任何数字都会存储到变量 out
.
当使用 mexCallMATLAB
时,您正在执行与上述相同的操作,但在 MEX 代码中调用它。此函数有一个输入参数和一个预期的输出参数。第二个参数在技术上是一个指向输出参数的指针,它是一个只有一个元素的数组。 input
的输出将因此存储在变量 new_number
中,该变量将包含一个数字。 str
变量是使用 mxCreateString
创建的 MEX 字符串。您必须 创建一个 MEX 字符串,因为请记住,要通过 mexCallMATLAB
调用的函数的输入变量的预期输入必须是 MEX 变量。因此,str
是 MEX 字符串,而 &str
是指向 MEX 字符串的指针。从技术上讲,这也是一个包含一个元素的指针数组。
调用此函数后,您将输入数字输入 MATLAB 命令 Window,因此数字将发送回 MEX 并存储到 MEX 代码中的 new_number
。
这似乎是一种从 MATLAB 命令 Window 将变量获取到 MEX 的优雅方法。在我的 MEX 经验中,我没有遇到任何其他方法,所以请继续使用它!