[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