Загрузка текстового файла в виде многомерного массива?

0

Я пытаюсь загрузить текстовый файл с разделителями табуляции и пробела в двумерный массив. Файл выглядит примерно так:

1 -3 4
4 -3 7
8 -1 10

У меня есть доступ к фрагменту кода, который предполагает, что допустимо сделать что-то вроде следующего:

int nums[][] = {
    #include "matrix.txt"
};

Однако, когда я пытаюсь скомпилировать этот код, я получаю ошибку:

$ gcc hangserver.c 
hangserver.c:10:5: error: array type has incomplete element type
In file included from hangserver.c:11:0:
matrix.txt:1:5: error: expected ‘} before numeric constant
$ 

Я знаю, что есть менее элегантные способы загрузить этот файл в массив, однако из чистого любопытства я хотел бы знать, можно ли реализовать описанную выше методологию. Большое вам спасибо за то, что нашли время, чтобы ответить на мой вопрос.

  • 1
    int nums[][] недействителен. Максимальная гибкость, которую вы можете иметь, это int nums[][<some integer>] .
  • 0
    Если вы уверены, что вам не нужно читать файл во время выполнения, и содержимое файла правильно отформатировано, вы должны это сделать (не пытайтесь выполнить задание умным способом) ...
Показать ещё 3 комментария
Теги:

3 ответа

3
Лучший ответ

Должна быть запятая после каждого числа, и каждая строка должна находиться внутри {}:

{ 1, -3, 4 },
{ 4, -3, 7 },
{ 8, -1, 10 }
  • 0
    Спасибо всем за ваши ответы. Мне также нужно было связать массив, как описано в алк.
2

В вашем подходе есть концептуальная проблема.

Если, например, вы

1, 2, 3, 4, 5, 6,

Как компилятор должен знать, что вы хотите массив 3x2 или 2x3 или 1x6 или 6x1?

Поэтому он должен знать количество столбцов заранее.

В приведенном выше примере

int matrix [][3] = {
#  include "data.txt"
};

будет также делать следующее:

int matrix [][2] = {
#  include "data.txt"
};

и это:

int matrix [][1] = {
#  include "data.txt"
};

и это:

int matrix [][6] = {
#  include "data.txt"
};

Хотя вы получаете предупреждение компилятора о отсутствующих фигурных скобках, так как (для 1- го случая) выше data.txt действительно должен выглядеть так:

{1, 2, 3,},{4, 5, 6,},

(Конец , необязательный.)


Чтобы полностью управлять этим через файлы снаружи, выполните:

int matrix[][
#  include "colums.txt"
] = {
#  include "data.txt"
};

Здесь содержимое columns.txt будет просто целым числом, описывающим предполагаемое количество столбцов, данные из data.txt должны быть разбиты на.

  • 0
    Ой, это не правильно давать такую рекомендацию! Шутки в сторону! (хотя это технически правильно конечно) ...
  • 0
    @ g-makulik: ОП попросил, так что давайте обсудим это.
Показать ещё 3 комментария
1

Линия расширяется:

int nums[][] = {
    1 -3 4
    4 -3 7
    8 -1 10
     };

что неприемлемо для синтаксиса C и C++. Попробуйте сменить файл matrix.txt на

{1, -3, 4},
{4, -3, 7},
{8, -1, 10}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню