curses.h okna i działania w nich

0

Witam.
Od paru dni męczę się z problemem zrobienia prostego "a la" klienta logowania do systemu.(Chodzi o prosty program z curses.h tworzący pod okno konsoli, do którego trzeba wprowadzić nick oraz hasło, które będzie automatycznie zastępowane gwiazdkami).

Niestety, mój problem zaczyna się już przy wprowadzaniu nick'u. Pierwsza litera idzie dobrze, w miejscu, w którym ma być(w tym pod oknie, zaraz po Login: ) niestety, druga już ucieka z pod okna i leci normalnie w konsoli, trzecia w pod oknie a czwarta poza itd.(zresztą, teraz latają jak chcą po tej konsoli)
Kod:

mvwaddstr(win1, 1, 12, "PANEL LOGOWANIA DO SYSTEMU");
mvwaddstr(win1, 4, 1, "Login: ");
mvwaddstr(win1, 6, 1, "Haslo: ");
wmove(win1, 4,8);// ustawiamy kursor do wpisywania po Login:
do
{       // !działa! znaczy, [cenzura ;) ] połowę napisu, ale ok..
     login[i]=getch(); // .. co ciekawe, nadal wczytuje login, dopóki w nowym oknie(czyt. niebieskie pole)
     i++;          // nie będzie 15 znaków.. czyli de facto wprowadzam ich bagatela.. 28?!  o_o'
     wrefresh(win1); //
     wgetch(win1);
}while(login[i]==KEY_ENTER||i==15);
	                
wrefresh(win1);
wgetch(win1);
key=getch();
getch();
endwin();
break;
}

wyskakuje mi warning:

 D:\Dev-Cpp\curses.h\Klient Logowania.cpp In function `int main()': 
53 D:\Dev-Cpp\curses.h\Klient Logowania.cpp [Warning] comparison is always false due to limited range of data type

czyli przy while'u, tam gdzie jest warunek. Czemu jest zawsze false?

Mam nadzieję, na w miarę jawne przedstawienie problemu.
Kod źródłowy cały znajduje się tutaj -> http://www.speedyshare.com/files/22673302/Klient_Logowania.cpp

Dziękuję i pozdrawiam!

//edit

próbowałem sztuczek z ponownym przeniesieniem kursora we właściwe miejsce, ale nie działa.

char login[15];
0

Nie wiem co miales w zamysle robiac ta petle, bo jedynie liznalem tego liba, ale nie wydaje Ci sie, ze powinien byc taki warunek w while ?

while(login[i]==KEY_ENTER||i <= 15);    // ostatecznie nie rowne 'i' pietnastu

Chodzi o to, ze domyslam sie, ze jakis sens powtorzeniowy miala ta petla, a skoro ma sie wykonac tylko jak i bedzie 15 lub wcisniety ENTER to cos mi nie pasuje.

Nie chciales przypadkiem wyjsc z tej petli po nacisnieciu entera lub po 15 obiegach ?

Jesli tak to daj jeszcze login[i] != KEY_ENTER, poniewaz petla sie wykonuje dopoki warunek jest spelniony, a nie na odwrot.

Oprocz tego zwroc uwage na to, ze pobierasz znak do login[i], nastepnie zwiekszasz i oraz sprawdzasz, czy login[i] == KEY_ENTER, a skoro zwiekszyles i to nie sprawdzasz ostatniego wpisanego znaku.

0

W miare dalszego pisania powyzszego posta doszedlem do wniosku, ze nie potrzenie patrzylem na te funkcje z ncurses w petli, a po prostu Tobie chodzi o wczytanie login'u, wiec takie warunek:

while(login[i-1] != KEY_ENETER && i < 15)
0

świetnie!
Problem przedwczesnego zamknięcia okna już miną.

Nadal pozostaje problem, uciekających napisów. :)

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