Dwuwymiarowa tablica znaków pobrana z pliku C

0

Witam. Muszę zrobić dwuwymiarową tablicę znaków pobraną z pliku.txt. Chodzi mi o to, żeby każdy znak był przypisany do danej komórki (np. tab[0][0] = 'T', tab[0][1] = 'A', tab[0][2] = 'K'). Napisałem oddzielne funkcje na liczenie kolumn, wierszy i się zatrzymałem. Mógłby mi ktoś wyjaśnić ten algorytm ?

2

Pokaż to już zrobiłeś, plik z danymi, oraz napisaną z palca tablicę wynikową jaka ma na jego podstawie powstać.

0

Liczydła

int length_counter(FILE *maze)
{
    int length_line = 0;
    char ch;
    while((ch = fgetc(maze)) != '\n')
    {
        length_line++;
    }
    return length_line;
}

int number_rows(FILE *maze)
{
    int rows = 0;
    char ch;
    while((ch = fgetc(maze)) != EOF)
    {
        if(ch == '\n')
            rows++;
    }
    return rows;
}

Moja biedna funkcja

while(1){
    while((matrix[i][j++] = fgetc(maze)) != '\n'){
    }
    i++;
    }
    FILE * maze;
    char i = 0, j = 0;
    int length_line = length_counter(maze);
    int rows = number_rows(maze);
    char matrix[rows+1][length_line+1];
for(i=0; i<rows; i++)
        {
            for(j=0; j<length_line; j++){
                printf("%c", matrix[i][j]);
            }

        }

Tak to ma wyglądać po wczytaniu.

#######@#####
####....#####
#....########
........#####
#####$#######
0

Bardzo dobrze, to jeszcze zawartość pliku z danymi poprosimy, tak aby było wiadomo, co się finalnie ma przełożyć na poniższe:

#######@#####
####....#####
#....########
........#####
#####$#######

co ważne - upewnij się, że ten wynik co podałeś jest prawidłowy

0

EDIT do "Tak to ma wyglądać po wczytaniu": Identycznie wygląda to w pliku tekstowym. Dodam od razu, że jak wyświetlę to za pomocą while i fgetc. to wyświetla tak jak pokazałem, ale zależy mi na tablicy 2D.

1

Ok, to zatem tak:

  1. czytasz z pliku ile wierszy i ile kolumn będzie potrzebne do stworzenia tablicy
  2. tworzysz tablicę przy pomocy kodu:
char **table = (char**) malloc(rows * columns * sizeof(char));
//użycie takiego twora klasycznie, czyli np tab[0][1]
  1. w razie potrzeby przestawiasz file pointer na jego początek, i używasz getline() aby wczytać pełen wiersz z pliku; oczywiście pamiętaj o właściwym nastawieniu parametrów dla getline()
  2. powtarzasz krok 3 póki nie będą wczytane wszystkie wiersza
0
char **matrix =(char**)malloc(rows*columns*sizeof(char));
    rewind(maze);
    for(i=0; i<rows; i++)
    {
        for(j=0; j<columns; j++)
        {
            matrix[i][j] = getline(matrix, size_t*columns, maze);
        }
    }
    for(i=0; i<rows; i++)
    {
        for(j=0; j<columns; j++)
        {
            printf("%c", matrix[i][j]);
        }
    }

Dodałem biblioteke <stddef.h>
Plik też mam otworzony.
I pojawia mi się błąd.
error: expected expression before 'size_t'|

0

No to takie pytanie - czy wewnętrzna pętla for jadąca po kolumnach jest potrzebna, czy zbyteczna?

0

Rzeczywiście jest to nielogiczne.

EDIT:
int nbytes = rows*columns*sizeof(char*);

 for(i=0; i<rows; i++)
    {
        getline(&matrix, &nbytes, maze);
    }

Teraz dostałem komunikat: undefined reference to 'getline'. Przeczytałem, że w czystym C nie mogę użyć getline, ponieważ go tam nie ma. Nie mam konieczności pisania w czystym C, ale nie mogę znaleźć biblioteki którą mógłbym dołączyć.

0

Ach, racja. Dla C będzie to fgets

1 użytkowników online, w tym zalogowanych: 0, gości: 1