提示用户在MEX代码中输入数字

时间:2016-06-28 05:53:56

标签: c matlab mex

我想知道是否有提示用户在MEX代码中输入整数。

类似于MATLAB中的输入或C中的scanf

我听说过mexCallMATLAB及其在

中的用法
 str = mxCreateString("Enter extension:  ");

   mexCallMATLAB(1,&new_number,1,&str,"input");

但是,我并不真正理解mxCreateString的重点是什么以及&str做了什么。如果有人能详细说明这一点,或者给我另一种提示用户输入数据的技巧,我将非常感激。

1 个答案:

答案 0 :(得分:4)

让我们从头开始。 mexCallMATLAB在MEX代码中调用MATLAB函数,用户定义的MATLAB函数或MEX文件。函数声明是这样的:

int mexCallMATLAB(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[], 
                  const char *functionName);

详细参数为:

  1. nlhs:MATLAB或MEX函数预期产生的输出参数总数。
  2. *plhs[]:一个指针数组,其中每个元素都是一个指向输出参数的指针
  3. nrhs:MATLAB或MEX函数预计要接受的输入参数总数。
  4. *prhs[]:一个指针数组,其中每个元素都是一个指向输入参数的指针。
  5. functionName:包含函数名称的C字符串。
  6. 请注意*plhs[]*prhs[]必须是指向 MEX 类型变量的指针数组。这很重要,因为这将用于了解接下来会发生什么。使用上述逻辑,查看您引用的mexCallMATLAB调用:

    mexCallMATLAB(1,&new_number,1,&str,"input");
    

    正如我们所看到的,在MATLAB中调用的函数是input函数,它是一个MATLAB函数,其中输入参数是字符串提示符,用于在接收来自的输入之前在命令窗口中显示用户并将其存储到输出变量中。请注意,期望的是数字表达式,通常是对数字的数字或某些操作。

    示例调用如下所示:

    out = input('Enter a number: ');
    
    因此,

    Enter a number:将显示在命令窗口中,您键入的任何数字都会存储到变量out中。

    使用mexCallMATLAB时,您正在执行上述操作,但在MEX代码中调用此方法。这个函数有一个输入参数和一个预期的输出参数。第二个参数在技术上是一个指向输出参数的指针,其中这个参数只是一个元素的数组。因此input的输出将存储在将包含数字的变量new_number中。 str变量是使用mxCreateString创建的MEX字符串。您必须创建一个MEX字符串,因为请记住,通过mexCallMATLAB调用的函数的输入变量的预期输入必须是MEX变量。因此,str是MEX字符串,&str是指向MEX字符串的指针。从技术上讲,这也是一个带有一个元素的指针数组。

    调用此函数后,您将输入编号输入MATLAB命令窗口,然后将编号发送回MEX并存储到MEX代码中的new_number

    这似乎是一种从MATLAB命令窗口到MEX的变量的优雅方法。我没有遇到过我在MEX体验中看到过的任何其他方法,所以继续使用它!