2016-06-28 77 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經歷中看到的其他方法,所以請繼續使用它!