2016-06-28 74 views
1

无论如何我都在提示用户在MEX代码中输入整数。提示用户在MEX代码中输入号码

类似的东西,以什么样的输入在MATLAB或scanf在C.

我听说mexCallMATLAB及其

str = mxCreateString("Enter extension: "); 

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

使用,但是我真的不明白什么是mxCreateString点和哪些呢&str做。如果有人能够详细说明这一点,或者给我另一种提示用户输入数据的技巧,我会非常感激。

回答

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字符串。

注意到,*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经历中看到的其他方法,所以请继续使用它!