所以这就是我正在制作的表格
#include <iostream>
#include <string>
using namespace std;
int main()
{
string tables[5][14] =
{ { "0", "3", "6", "9", "12", "15", "18", "21", "24", "27", "30", "33", "36", "2 to 1" },
{ "2", "5", "8", "11", "14", "17", "20", "23", "26", "29", "32", "35", "2 to 1" },
{ "1", "4", "7", "10", "13", "16", "19", "22", "25", "28", "31", "34", "2 to 1" },
{ "1st 12", "2nd 12", "3rd 12" },
{ "1-10", "Even", "Red", "Black", "Odd", "19-36" } };
cout << tables << endl;
return 0;
}
所以我运行这段代码,我的编译器没有显示任何错误,但所有打印的都是一串奇怪的字母和数字,
007EF610
我以前从未遇到这个问题,可以真正使用一些建议,谢谢你的时间!
答案 0 :(得分:2)
您的代码打印tables
,这是第一个字符串的地址。如果要打印字符串数组数组中包含的所有字符串,则必须自己编写一个遍历所有tables[i][j]
的循环,例如:
for(int i=0; i<5; ++i)
{
for(int j=0; j<14; ++j)
{
cout << tables[i][j] << endl;
}
}
答案 1 :(得分:1)
你正试图做这样的事情:
#include <iostream>
#include <string>
#define ROWS 5
#define COLS 14
using namespace std;
int main()
{
string tables[ ROWS ][ COLS ] =
{
{ "0", "3", "6", "9", "12", "15", "18", "21", "24", "27", "30", "33", "36", "2 to 1" },
{ "2", "5", "8", "11", "14", "17", "20", "23", "26", "29", "32", "35", "2 to 1" },
{ "1", "4", "7", "10", "13", "16", "19", "22", "25", "28", "31", "34", "2 to 1" },
{ "1st 12", "2nd 12", "3rd 12", "", "", "", "", "", "", "", "", "", "", "" },
{ "1-10", "Even", "Red", "Black", "Odd", "19-36", "", "", "", "", "", "", "", "" }
};
for ( int i = 0; i < ROWS; i++ )
{
for ( int j = 0; j < COLS; j++ )
{
cout << tables[ i ][ j ] << " ";
}
cout << endl;
}
system( "pause" );
return 0;
}
<强>输出:强>
0 3 6 9 12 15 18 21 24 27 30 33 36 2 to 1
2 5 8 11 14 17 20 23 26 29 32 35 2 to 1
1 4 7 10 13 16 19 22 25 28 31 34 2 to 1
1st 12 2nd 12 3rd 12
您的代码发生了什么:
您假设cout << tables << endl
能够打印整个表格。但是这是错误的。 cout
无法自动获取有关您的表格的任何信息。所以你必须正确地循环它。
您获得的数字(如007EF610)实际上是内存中tables
数组的地址。
答案 2 :(得分:1)
首先,正确初始化数组(需要填写每个条目[5] [14]:
string tables[5][14] =
{
{ "0", "3", "6", "9", "12", "15", "18", "21", "24", "27", "30", "33", "36", "2 to 1" },
{ "2", "5", "8", "11", "14", "17", "20", "23", "26", "29", "32", "35", "2 to 1", "" },
{ "1", "4", "7", "10", "13", "16", "19", "22", "25", "28", "31", "34", "2 to 1", "" },
{ "1st 12", "2nd 12", "3rd 12", "", "", "", "", "", "", "", "", "", "", "" },
{ "1-10", "Even", "Red", "Black", "Odd", "19-36", "", "", "", "", "", "", "", "" }
};
然后遍历它,跳过空值:
for(int i=0;i<5;i++){
for(int j=0;j<14;j++){
if (!tables[i][j].empty()) {
cout << tables[i][j] << " ";
}
}
cout << endl;
}
输出:
0 3 6 9 12 15 18 21 24 27 30 33 36 2 to 1
2 5 8 11 14 17 20 23 26 29 32 35 2 to 1
1 4 7 10 13 16 19 22 25 28 31 34 2 to 1
1st 12 2nd 12 3rd 12
1-10 Even Red Black Odd 19-36
完整代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string tables[5][14] =
{
{ "0", "3", "6", "9", "12", "15", "18", "21", "24", "27", "30", "33", "36", "2 to 1" },
{ "2", "5", "8", "11", "14", "17", "20", "23", "26", "29", "32", "35", "2 to 1", "" },
{ "1", "4", "7", "10", "13", "16", "19", "22", "25", "28", "31", "34", "2 to 1", "" },
{ "1st 12", "2nd 12", "3rd 12", "", "", "", "", "", "", "", "", "", "", "" },
{ "1-10", "Even", "Red", "Black", "Odd", "19-36", "", "", "", "", "", "", "", "" }
};
for(int i=0;i<5;i++){
for(int j=0;j<14;j++){
if (!tables[i][j].empty()) {
cout << tables[i][j] << " ";
}
}
cout << endl;
}
return 0;
}
答案 3 :(得分:1)
您知道,在C
和C++
中,只需打印变量名称就不会打印它的内容,如果它不是更简单的话数据类型,即int
,float
,long
,string
,char
等。
tables
是一个二维数组。要打印其内容,您需要遍历数组中的每个元素并打印:
for(int i=0; i<5; i++) {
for(int j=0; j<14; j++){
cout<<tables[i][j]<<'\t';
}
cout<<endl;
}
PS:你输出的内容 - 007EF610
- 是2D数组的基地址,即内存中存储它的位置。
答案 4 :(得分:0)
首先要了解这个声明是什么意思
string tables[5][14]
这意味着table是一个2d数组(有5行和14列)的字符串对象
这有助于你理解你所犯的错误