2016-02-18 64 views
3

使用fprintf欲產生輸出看起來像這樣:使用fprintf具有雙陣列的組合和細胞陣列

名稱ABC和數字1個
名稱DEF和號碼2
名GHI和號碼3

這是我嘗試使用來實現這個代碼:

names= {'abc','def','ghi'} 
numbers = [1 2 3]; 
fprintf('names %s and numbers %2.2f \n',names{1:3},numbers) 

不幸的是它產生的輸出如下所示:

名ABC和數字100.00
名EF和數量103.00
名喜和號碼1.00
名稱,數量以及

有誰知道如何解決這個問題?或者甚至可以將fprintf與單元陣列結合起來?在此先感謝

回答

4

看看要傳遞到fprintf什麼,它只是在錯誤的順序,號碼創建一個參數不是三個人:

>> names{1:3},numbers 

ans = 

abc 


ans = 

def 


ans = 

ghi 


numbers = 

    1  2  3 

而是使用:

C=names 
C(2,:)=num2cell(numbers) 
fprintf('names %s and numbers %2.2f \n',C{:}) 

如果您在C{:} typie你會看到,爲了各個參數:

>> fprintf('names %s and numbers %2.2f \n',C{:}) 
names abc and numbers 1.00 
names def and numbers 2.00 
names ghi and numbers 3.00 

>> C{:} 

ans = 

abc 


ans = 

    1 


ans = 

def 


ans = 

    2 


ans = 

ghi 


ans = 

    3 
2

您所看到的輸出中,本身就是有趣:它解析abc爲一個字符串,然後d因爲它再次ASCII號碼,然後ef string和g的號碼,然後hi字符串,1的數量和後兩個失敗,因爲MATLAB無法將2看作字符串。這意味着fprintf的一個重要的事情:它按照列主要的順序採用它的參數。

因此,考慮到這一點,我們嘗試創建一個單元陣列,例如,

for ii=numel(numbers)-1:1 
    tmp{ii,2} = numbers(ii); 
    tmp{ii,1} = names{ii}; 
end 

不幸的是,這導致了一個錯誤,fprintf無法與單元格陣列一起使用。我會用一個可靠for環路走:

names= {'abc','def','ghi'} ; 
numbers = [1 2 3]; 
for ii=1:numel(numbers) 
    fprintf('names %s and numbers %2.2f \n',names{ii},numbers(ii)) 
end 

names abc and numbers 1.00 
names def and numbers 2.00 
names ghi and numbers 3.00