2011-05-23 45 views
0

我正在寫一個函數,它有一個字符串的二維數組作爲輸入參數。我初始化字符串,將它傳遞給函數,但是當我試圖打印數組時什麼都沒有發生。它說數組的長度是0.我所有的函數都存儲在一個頭文件中。這裏是我的代碼:多維字符串C++

#include<iostream> 
#include<string> 
#include<iomanip> 
using namespace std; 

int c,i,j,fx,fy; 
int color,fields,rows,anim,speed; 
string opt[5][50]; 
string popt[5][50]={ 
    {"caption","asdf","safd","asf"}, 
    {"caption1","dsafa","asdf","asdf"}, 
    {"caption2","asdf","asdf","asdfas"}, 
    {"caption3","sadfa","asdfs","fasdfa"}}; 

void ini(int focus_text_color, int n_fields,int n_rows, string options[][50], bool animation=false, int animation_speed=10) 
{ 
    color=focus_text_color; 
    fields=n_fields; 
    for(i=1;i<fields+1;i++) 
    { 
     for(j=1;j<rows+1;j++) 
     { 
      opt[i][j]=options[i][j]; 
     } 
    } 
} 

int drawh() 
{ 
    system("cls"); 
    for(i=0;i<fields;i++) 
    { 
     for(j=0;j<rows;j++) 
     { 
      cout<<opt[i][j]<<setw(opt[i+1][j].length()+5); 
     } 
    } 
    return 0; 
} 

void main() 
{ 
    ini(LIGHTRED,4,4,popt); 
    drawh(); 
} 

注:這是代碼,所以我沒有測試過,和我的英語不好對不起的一部分:d

從@奧利的評論
+1

你爲什麼要這麼做'的(i = 1; i 2011-05-23 07:37:43

+0

-1:你有沒有嘗試在調試器中逐句通過你的代碼?或者添加'printf' /'cout'跟蹤語句來查找變量的值,或者循環遍歷多少次? – 2011-05-23 07:39:21

+0

爲什麼你的初始化器不匹配你的數組的維度? – 2011-05-23 07:39:29

回答

0

你之所以沒有得到任何輸出,你不初始化全局變量rows,使其保持在0你init功能應該是:

void ini(int focus_text_color, int n_fields,int n_rows, string options[][50], bool animation=false, int animation_speed=10) 
{ 
    color=focus_text_color; 
    fields=n_fields; 
    rows = n_rows; //-- ADDED LINE 
.... 
+0

我怎麼會這樣愚蠢? :) – Martin 2011-05-23 07:56:57

+0

@Martin:在調試器中運行你的代碼可以幫助你很快發現這個問題! – 2011-05-23 08:03:35

1

分開。爲了使其更簡單,您可以通過引用來傳遞數組。見下面的例子:現在

template<unsigned int ROW, unsigned int COL> 
void ini (string (&s)[ROW][COL]) // psuedo code for 'ini'; put extra params to enhance 
{ 
    ini(s, ROW, COL); 
} 

template ini()提供一個包裝實際ini(),其計算在編譯時的陣列的行/列。用法很簡單:

string s[10][5]; 
ini(s); // calls ini(s,10,5); 

你的循環應該從維0開始,而不是1進行復印。檢查我的方法並修改你的代碼。

for(int i = 0; i < ROW; i++) 
    for(int j = 0; j < COL; j++) 
    s1[i][j] = s2[i][j]; 

還有一些在你的代碼由於傳遞錯誤的尺寸(例如通過4的尺寸,同時呼籲ini(),當它應該是5)很多問題。

+0

我想過使用這種方法,但因爲我是C++新手,所以我試着遠離高級的東西:) – Martin 2011-05-23 07:56:41

+0

@Martin,'template'一點都不復雜,但不是** advance **今天的時間。學習他們會讓你避免這樣的錯誤,並會讓你成爲一個**老手**! :) – iammilind 2011-05-23 07:59:47