Witam,
pisze program pod Unixa, ktory wykorzystuje biblioteke curses (wolalem tego nie robic, ale nie mialem wyjscia, gdyz potrzebne mi bylo getch()). Przy jednej z funkcji napotkalem problem, z ktorym poradzic sobie nie moge.
utwor* dodaj(utwor *jakis){
utwor *nowa;
int i; /* kontrolka bledow */
clear();
echo();
nodelay(stdscr, 0);
if((nowa = (utwor *) malloc (sizeof(utwor)))!=NULL){
printw("\npodaj tytul: ");
refresh();
while(i=(pobierz(nowa->tytul, 40))!=1){
printw("pole nie moze byc puste. podaj jeszcze raz: ");
refresh();
}
/*analogicznie dodawane sa inne pola*/
}
}
- tak wyglada fragment funkcji majacy dodac element do dwukierunkowej listy cyklicznej; struktura zawiera 40-sto elementowa tablice znakow, do ktorej trzeba pobrac stringa. uzylbym scanw, ale pobieranie nie moze byc przerywane przez biale znaki.
int pobierz(char *gdzie, int ile){
char c, buf[50];
int i=0, dobrze=0; /* licznik znakow */
while((c=getch())!='\n'){
buf[i] = c;
i++;
if(i==ile){
break;
}
}
buf[i]='\0'; /* dodanie znaku \0 na koncu stringa */
if(buf[0]=='\n'){ /* jesli wyraz nie jest pusty */
strcpy(gdzie, buf);
dobrze=0;
} else {
strcpy(gdzie, buf);
dobrze=1;
}
return dobrze;
}
funkcja nie dziala stabilnie, wrzuca jakies dodatkowe znaki, np. mimo samego wcisniecia enter (wprowadzenia pustego znaku) petla while w funkcji dodajacej strukture w ogole nie dziala itp. jesli ktos moglby na to zerknac i poprawic to bede bardzo wdzieczny.