[C] curses - funkcja wczytujaca stringi

0

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.

0

wedlug mnie w ogóle podzielic lepiej program na czesc "liczaca" i czesc zajmujaca sie wyswietlaniem grafiki. No ale jak chcesz. co do getch() to o ile z doswiadczenia wiem niezle psuje okna, sprobuj uzyc znak=wgetch(nazwa_okna_w_ktorym_pobiera_znak); pozdrawiam

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