Итак, это та таблица, которую я делаю
#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
Я никогда не сталкивался с этим раньше и мог действительно использовать некоторые советы, спасибо за ваше время!
Ваш код печатает tables
, которые являются адресом первой строки. Если вы хотите напечатать все строки, содержащиеся в массиве массива строк, вам нужно написать цикл самостоятельно, который проходит через все tables[i][j]
, например:
for(int i=0; i<5; ++i)
{
for(int j=0; j<14; ++j)
{
cout << tables[i][j] << endl;
}
}
Вы знаете, что в C
и C++
просто печать имени переменной не будет печатать его содержимое, если это ничего, кроме простых типов данных, то есть int
, float
, long
, string
, char
т.д.
переменные tables
, как вы сказали, представляют собой 2D-массив. Чтобы распечатать его содержимое, вам нужно перебрать каждый элемент в массиве и распечатать его:
for(int i=0; i<5; i++) {
for(int j=0; j<14; j++){
cout<<tables[i][j]<<'\t';
}
cout<<endl;
}
PS: то, что вы получаете как вывод - 007EF610
- это базовый адрес 2D-массива, то есть местоположение в памяти, где оно хранится.
Вы пытаетесь сделать что-то вроде этого:
#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
в памяти.
Во-первых, правильно инициализируйте массив (вам нужно заполнить каждую запись [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;
}
Сначала поймите, что значит эта декларация
string tables[5][14]
Это означает, что таблица представляет собой массив 2d (который содержит 5 строк и 14 столбцов) строкового объекта
Это поможет вам понять ошибку, которую вы совершили