1. Začni tím, že se vůbec naučíš načítat hodnoty ze souboru/stdin (je to vlastně to samé, ale nebudu ti plést hlavu), tj. zadefinuj si na začátku souboru rozměry matice, ty načti a potom podle toho načítej řádky a sloupce. Až to budeš mít, vypiš si všechno zase zpátky na stdout, přesměruj do souboru a
diff. Ten vstup bude vypadat cca takhle:
2 3
1 2 3
3 4 5
Až tohle budeš mít správně, jdi k bodu 2.
2. Smaž rozměry matice ze vstupu (tj. první řádek vstupu výše) a naprogramuj úplně zvlášť funkci, kterou určíš počet sloupců matice. Bude to něco ve smyslu že načteš první řádek vstupu (tj. vše až po první
'\n') a z toho načteš počet platných integerů. Další postup bude, že vezmeš to, co máš z bodu 1. a budeš načítat o řádek méně (ten jsi už načetl, když jsi počítal sloupce). Navíc ještě nebudeš počítat řádky, ale budeš načítat "dokud není EOF", ptž dopředu nevíš, kolik těch řádků je. Měla by to být menší úprava kódu z bodu 1.
Až budeš mít i bod dva, udělej opět to samé co v bodu 1.: Vypiš výsledek do stdout a porovnej se vstupem (pak si můžeš udělat vstupů víc a napsat si na to bash script).
3. Až ti tohle všechno bude fungovat, můžeš vůbec začít přemýšlet o dynamické alokaci.
Na závěr se zamysli nad tím, jaké "mezní hodnoty" a nesprávné vstupy můžeš dostat. Můžeš dostat prázdný vstup, vstup větší než tvoje staticky alokované pole, matice může být tzv. "zubatá" (trochu těžší na ošetření), může obsahovat neplatné znaky atd. A zkus tyhle věci ošetřit (tj. aby například program zdechnul kontrolovaným způsobem se správnou zprávou na výstupu) nebo se aspoň zamyslet, jak to udělat.
Hinty
1. Zjisti si, jaký je rozdíl mezi
scanf("%d", ...); a
scanf(" %d", ...); - tj. bez mezery před formátovacím řetězcem a s mezerou
2. Používej vývojové prostředí a debugger - názorně uvidíš, co se děje.
3. Automatizuj si testování.