2016-10-10 7 views
-2

Если у меня есть файл с 64 * 64 целыми числами. (Первый 64 будет номером 0, а следующий 64 будет строкой 1 и т. Д.). Как сохранить эту таблицу в 2D-массиве. Вот мой кодСохранение 64 * 64 целых чисел из файла в 2D-массив

#include <iostream> 
    #include <fstream> 
    using namespace std; 
    int main() 
    { 
     ifstream infile; 
     infile.open("table.txt"); 
     if (infile.fail()) 
     { 
      cout << "could not open file" << endl; 
      exit(6); 
     } 
     int array[63][63];  
     while (!infile.eof()) 
     { 
      infile >> array[63][63]; 
     } 
     cout << array[63][63] << endl; 
     return 0; 
    } 

, когда это выполняется я получаю только «1»

+0

Каждый раз, когда ваши перебирает время цикла, вы назначая INFILE результат в массив [63] [63], а не изменения х, у (или любой другой индексы) и заполнение всего массива. –

+1

Во-первых, [это неверно: 'while (! Infile.eof())'] (https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered- неправильно). И вы всегда читаете * тот же * элемент, переписывая каждую итерацию. Ваш вывод является единственным значением именно потому, что это то, что делает ваш код; одно выходное значение: 'cout << array [63] [63] << endl;'. Я думаю, вам нужно просмотреть части изучаемого вами языка, потому что здесь немного пропало. – WhozCraig

+0

'infile >> array [63] [63];' это выходит за рамки и является неопределенным поведением. –

ответ

0

Вместо присвоения значения из файла в массив [63] [63], вы должны назначить его к одному элементу и прирост индекса для заполнения всего массива:

int x = 0; int y = 0; 
while (!infile.eof()) 
{ 
    infile >> array[x++][y]; 
    if (x > 63) 
    { 
     x = 0; 
     y++; 
    } 
} 

Что-то в этом направлении должно хорошо работать.

Кроме того, как отмечалось выше, массив должен быть инициализирован как int array [64] [64].

1

У меня есть файл с таблицей из 64 * 64 целых чисел (...) Как хранить эту таблицу в 2D-массив?

Прежде всего, вы должны объявить массив нужного размера (ну, вы должны рассмотреть возможность использования std::vector или std::array вместо этого, но вы просили 2D массива):

const size_t size = 64; 
int array[size][size]; 

Затем вы должны назначить каждый из своих элементов в цикле. В вашем коде вы повторно пишете элемент array[63][63], который также находится за пределами выделенного вами диапазона, потому что вы объявили массив как int array[63][63]. Помните, что деление массива начинается с 0, поэтому, если вы выделяете достаточно памяти для, скажем, 63 int s, действительны только индексы от 0 до 62.

Возможным способом решения этой задачи является:

for (size_t i = 0; i < size; ++i) 
{ 
    for (size_t j = 0; j < size; ++j) 
    { 
     if (!(infile >> array[i][j])) 
     { 
      std::cerr << "Too few elements were read from file\n"; 
      exit(7); 
     } 
    } 
} 
Смежные вопросы