I jos da napomenemo da stdlib.h header je dio ANSI C standarda, dok windows.h nije.
Uvijek koristi standardne headere naspram OS-specificnih za ovako jednostavne zadatke. To ce meni koji koristim BSD omogucit da ja copy pastam tvoj kod iz browsera i kompajliram ga, bez da moram radit preinake.
Jos cemo malo napominjat, sve mi se cini. Linija
Code:
char rijec[a];
nije dozvoljena unutar ANSI C standarda. Ovisno od kompajlera do kompajlera, moze proci ili ne. Inicijalizacija polja uvijek treba imati konstantu, a ne varijablu. Tvoj slucaj bi se rijesio ovako :
Code:
char *rijec = (char *)malloc((sizeof(char) * a) + 1);
Dalje, vjerujem da ti ne treba varijabla za drugo polje charova, jer koristis samo jedno. Pa onda, unos mozes jednostavno rijesiti gets funkcijom, bez da bespotrebno vrtis nekakve petlje i upisujes znak po znak. Petlja za ispis je dobra, iako bi ja tu koristio putchar funkciju umjesto printf, ali moze i ovako. Moze se i izbjec da korisnik mora prvo upisati broj slova u rijeci, ali vjerujem da ti je to i neka poanta za zadatak. Dakle, napravis finu dinamicku alokaciju sa mallocom kao na primjeru gore, i jos mozes i provjerit da malloc slucajno nije vratio NULL pointer sto bi znacilo da iz nekog razloga nije uspio alocirat dovoljno memorije za tvoju rijec (nevjerujem da se ovo moze desit, ali je dobra programerska praksa). Gets funkcija ima nekakvih problema, ali uvijek mozes koristiti dobru fgets funkciju i napomenes da ti je ulaz stdin. I na kraju, kod ovog nacina kako ti upisujes znak po znak sa scanf, umjesto
Code:
scanf("%c", &rijec[i]);
koristi
Code:
scanf("%c", (rijec + i));
Ovo dodatno poboljsava kod jer umjesto dobivanja adrese nekog mjesta u polju koristimo vec gotovu adresu, koju ne treba vaditi iz nicega.
[Ovu poruku je menjao z@re dana 27.03.2006. u 23:58 GMT+1]