( egmont | 2016. 10. 16., v – 23:44 )

A "for(i++;" kezdetű ciklusod eggyel elcsúsztatja az i változó szemantikáját az előző ciklushoz képest. Az előző ciklus ugyanis eggyel többször növeli i-t, mint ahány karaktert kiír, majd van még egy külön printf, amelyik egálba hozza. Tehát üres inicializálás tartaná fenn ugyanazt a szemantikát (oszlop száma 1-gyel kezdve). Így a jelen kód ékes példája annak, hogy addig pofozod a feltételekben plusz-mínusz a konstansokat, amíg működni nem látszik a kód, miközben talán nem igazán érted, de legalábbis nincs jól megfogható egységes koncepció amögött hogy mit is csinálsz.

Hosszú távon sokkal jobban jársz, ha rászoksz arra, hogy az indexek 0-val kezdődnek, és a bennmaradási feltétel általában úgy néz ki, hogy "index < összdarabszám". Így a legkisebb az eggyel elcsúszás (off by one) veszélye. A "< valami - 1" alakú feltétel (kiszámolsz egy értéket, kivonsz egyet, és még annál is szigorúan kisebbnek kell lennie, vagyis a kiszámolt "valami" értéknél legalább kettővel kisebbnek) tipikusan eléggé gyanús (ún. code smell).

Szőrszálhasogatás:

"!(sor == 1)" helyett "sor != 1"

A harmadik szekció nagy for ciklusának bezáró kapcsos zárójele hibásan van indentálva.

Nem szeretnék indentálási hitvitába belemenni, de tapasztalatom szerint abban szinte mindenki egyetért, hogy beépített kulcsszavak (for, if, ...) után szóközt szokás tenni, valamint a sorvégi nyitó kapocs (ha ezt a stílust választod, nem új sorban nyitod ki) elé is.

Az output-ot legalább egy newline karakterrel zárjuk, különben a prompt fura helyen jelenik meg és egyéb rondaságok is történnek.