Wypisanie tablicy dwuwymiarowej - dziwny wynik

0

Witam, mam problem z tym programem. Wszystko ładnie pięknie się kompiluje lecz wynik wypisywania jest dziwny. Kiedy zadeklaruje ilosc kolumn i wierszy poprzez #define to działa dobrze. Problem wystąpił kiedy zamieniłem go tak aby wczytywał ilość wierszy i kolumn od użytkownika. Kiedy zadeklaruje np. tablicę 2x2 i wpisze liczby kolejno : 1,5,4,6. To wypisuje mi tablice taką:
46
46
Co tu jest nie tak ??

#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
int j;
int m;
int w;
int k;
int tab2D[w][k];
printf("Podaj ile wierszy");
scanf("%d",&w);
printf("Podaj ile kolumn");
scanf("%d",&k);
for(i=0;i<w;i++){

	for(j=0;j<k;j++){
		printf("Podaj liczbe do tablicy");
		scanf("%d",&m);
		tab2D[i][j]=m;
		
	}
}

for(i=0;i<w;i++){
	for(j=0;j<k;j++){
printf("%d",tab2D[i][j]);

}
printf("\n");
}

return 0;

}

0

Po pierwsze, wklej kod w poprawny sposób, bo sprawiasz że jest on nieczytelny. Z tego co zrozumiałem liczbę wierszy/kolumn pobierasz od użytkownika na etapie pracy programu. Poczytaj o tablicach dynamicznych.

0

Ok już wiem co zrobiłem nie tak. Użyłem define i jest dobrze. Temat do zamkniecia

0
rufusek94 napisał(a):

Ok już wiem co zrobiłem nie tak. Użyłem define i jest dobrze. Temat do zamkniecia

No nie wiem, błąd polegał na tym, że okreslałeś rozmiar tablicy za pomoca zmiennych, do których nie była przypisana jeszcze żadna wartość.

1

#Nie nazywaj zmiennych m, w, p, wtf, ciocia17, etc.
#Tworz struktury danych do rozwiazywania problemow, a nie tworz logiki korzystajacych z prymitywow, np. struct 2DArray { ... }
#Dziel kod na male (bardzo male) funkcje, np. 2DArray createArray(usigned w, unsigned h), void fillArrayFromStdin(2DArray array), etc.
#Staraj sie oddzielac operacje wejscia/wyjscia od kodu operujacego na danych.

0
n0name_l napisał(a):

#Tworz struktury danych do rozwiazywania problemow, a nie tworz logiki korzystajacych z prymitywow, np. struct 2DArray { ... }

n0name_l napisał(a):

#Staraj sie oddzielac operacje wejscia/wyjscia od kodu operujacego na danych.

Czy gdzieś można poczytać o tych zagadnieniach dotyczących poprawnego podejścia do pisania i projektowania kodu?

1

W programowaniu jak nie dziwnie to brzmi a jednak nie zawsze trzeba mieć tablicy dwuwymiarowej aby mieć tablice dwuwymiarową.

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

int main()
  {
   unsigned Y,X,size,i;
   int *tab;
   printf("Podaj ile wierszy: ");
   scanf("%u",&Y);
   printf("Podaj ile kolumn: ");
   scanf("%u",&X);
   size=Y*X;
   tab=(int*)malloc(size*sizeof(int));
   for(i=0;i<size;scanf("%d",tab+(i++))) printf("Podaj tab[%u][%u]: ",i/X,i%X);
   for(i=0;i<size;++i) printf("%5d%s",tab[i],"\n"+((i+1)%X>0));
   free(tab);
   return 0;
  }
0
n0name_l napisał(a):

Np. tu: http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882

Dziękuję :) Z pewnością zainteresuję się tą pozycją książkową.

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