2017-08-07 54 views
0

我听不太懂下面的代码,得到()二维数组

static char s[N][N]; 

int i = 0; 
while(gets(s[i])) 
{ some loop, where i gets incremented } 

考虑数组是N维的,那么会发生什么时

gets(s) 

叫?它如何将整个字符串存储在s [i]元素中?它感觉像s [i]应该等于输入的第一个字符,而不是整个字符串。当它以更多的输入循环时会发生什么?重点是将其存储为

​​

它看起来像代码目前正在做的。但我不明白如何。

编辑#1

很多人建议不要使用gets()函数,但为什么会得到()不恰当的时候不能有任何非法输入和我想要的字符作为元素存储在数组中而不是一个字符串?

+2

不要使用裸露的数组,也不要使用裸指针。事实上,远离任何裸体。使用'std :: string','std :: vector','std :: array'等。 –

+0

此代码复制自https://quickgrid.wordpress.com/2015/09/28/uva-problem- 424-整数探究溶液/。我只是试图了解解决方案。 –

+2

不要在C++中使用'gets'。它已被弃用,并已被删除。 – NathanOliver

回答

2

s[i]元素是一个字符数组,因为s是一个数组数组。可以使用字符数组来存储字符串,方法是使用零字符(称为“nul”)来标记结尾。

0

实施例:

int multi_array[2][2] = {{2,3,4}, 
         {7,8,9}, 
         {1,5,0}}; 

Array[n][m]

获取 第一位置Array[0][0]

第二位置Array[0][1]

位置0,1为3

位置1,2是9

位置2,2,是0

0

上面的代码存储所述字符串,但使用一个编号的索引。 但是将数字索引存储在数组的第一维中。这样它

想,我想存储256个字符的最大尺寸的10串:

int main() 
{ 
    char s[10][256]; 

    for (int i = 0; i < 10; i++) { 
     gets(s[i]); 
    } 
    for (int i = 0; i < 10; i++) { 
      cout << s[i] << endl; 
    } 
} 

cout << s[1][2] << endl; 

注:在上面的代码,它会输出第二个条目中的最后一行(我们订购一切从0-9)和该条目字符串的第三个字符。 因此,如果我的输入是test2,那么输出将是's'。

注意:调用gets(s)是不正确的,因为它不会被编译,也不是代码的意图。

gets()调用具有某些功能,如果输入未被监视,可能会导致您陷入缓冲区溢出问题。