2011-05-23 62 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