[C]Tablice i przydzielanie pamięci

0

Jako, że to mój pierwszy post na tym forum witam wszystkich :)

Otóż mam pewien mały problem z tym kawałkiem kodu

#include <stdio.h>
#include<stdlib.h>

char** rysowanie()
{
    int a;
    a=0;
    char** plansza;
    plansza=(char**)malloc(sizeof(char)*61);
    for(a;a<17;a++)
        {
        plansza[a]=(char*)malloc(sizeof(char)*90);

        }
    unsigned int wiersz, kolumna;
    FILE*plik;
    plik=fopen("labirynt.txt","r");
    if(plik==NULL)
        {return NULL;}
    while(!feof(plik))
    {
        for(wiersz=0;wiersz<17;wiersz++) 
        {
            for(kolumna=0; kolumna<90; kolumna++) 
            {
                fscanf(plik, "%c", &plansza[wiersz][kolumna]);

            }
        }
    }
    aktualizacja(plansza);

    return plansza;
}

Wprawny programista pewno od razu zauważy błąd, natomiast dla mnie początkującego nie est to łatwe. Otóż przydzielam pamięć tablicy 2 wymiarowej po czym sczytuje zawartość pliku do tablicy. Niestety tak się składa, że sczytuje mi tylko do pamięci zawartość pierwszego i nie bardzo wiem jak sobie z tym poradzić.

0

Chyba nie ogarniam, czy to:

plansza=(char**)malloc(sizeof(char)*61);

Nie powinno wyglądać tak: (zważywszy na kolejne instrukcje):

plansza=(char**)malloc(sizeof(char*)*17);

?

i tak btw nie musisz się chwalic swoim szczytowaniem na forum :P (chyba że chodziło o wczytywanie...)

0

Hmm. Ok wczytywanie :P
Poprawka niestety nie rozwiązała problemu. Dalej wywala tylko 1 wiersz tablicy.

EDYTKA :)

void aktualizacja(char **plansza)
{
    unsigned int a,b;
    a=b=0;
    system("clear");
    printf("Labirynt\n________________________________________\nSterowanie Lewo: a Prawo: d Gora: w Dol: s Podnies: q Otworz: e\n");

    for(a;a<17;a++)
        {
        for(b;b<90;b++)
            {
            printf("%c", plansza[a][b]);
            }
        }
}

Dla jasności dorzucę funkcje wyświetlajaca :)

0

Co znaczy "jeden wiersz"?
Ja nigdzie nie widze przy wypisywaniu \n wiec całą tablicę wypisze ci jednym ciągiem. Chodzi ci o :

for(a=0;a<17;a++)
{
  for(b=0;b<90;b++)
  {
    printf("%c ", plansza[a][b]);
  }
  printf("\n");
}
0

Otóż z całej tablicy(którą zamieszczam niżej) wypisuje mi tylko pierwszy wiersz.

|=======================================================================================|
|                       |                        |                                      |
|0----------------------(------------------------{-------------------------------------$|
=================-------|========================|========-----=========================|
                |-------|========================|       |-----|                        |
                |-------|                        |$------>-----{-----------------------*|
                |-------{-----------------------*|=======|-----|========================|
================|-------|========================|       |-----|                        |
|               |-------|                        |*------}-----{-----------------------*|
|#--------------)-------<-----------------------#|=======|-----|========================|
|===============|-------|========================|       |-----|                        |
                |-------|                        |------->-----<-----------------------$|
                |-------|i-----------------------}-------|-----|-----------------------$|
================|===-===|========================|=======|-----|========================|
|------------------------------------------------|       |-----|                        |
|$--$--$-------------------------------$--$--$--$|$------}-----{------------------------[
|================================================|=======|=====|========================|

Ma mi każdy znak wczytać do osobne komórki i wyświetlić. Niestety wyświetla tylko pierwsze 90 - czyli pierwszy wiersz :)

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