Nowe posty

Autor Wątek: getch() ncurses.h  (Przeczytany 2677 razy)

Mal

  • Gość
getch() ncurses.h
« dnia: 2012-02-16, 14:04:22 »
Witam,

Jestem bardzo początkująca w zakresie linuxa. Napisałam program pod windowsa, który działa i chciałam go przenieść na linuxa. Po wielu bojach udało mi sie go skompilować (bez errorów i warningów) ale niestety nie działa. Problem występuje z funkcją getch(). Doczytałam, że żeby konsola była w odpowiednim trybie należy użyć cbreak() ale to też nic nie zmienia.

Idea zadania jest prosta: wczytujemy znaczki (koniecznie "na bieżąco", bez zatwierdzania każdego kolejnego enterem), jeśli znak nie jest literą to wypisujemy stosowny komunikat. Mój kod wygląda następująco (3 pliki: main.cpp, head.h, literki.cpp)

main.cpp:


#include "head.h"

int main(){
char znak = 'a';
vector ciag;

while(znak){
    cbreak();
    znak = getch();
if(znak==13){
cout< break;
}
Lancuch X(znak);
try{
if(getFlag(X) == false) throw X;
cout< ciag.push_back(X);
}
catch(Lancuch& x){
cout< cin>>znak;
if(znak == 'n') break;
}
}
cout<<"Wprowadzone litery: "<for (int unsigned i = 0; i cout<< getChar(ciag[i]);
}
cout<}
literki.cpp
#include "head.h"

Lancuch::Lancuch(char lit){
if((lit>64 && lit<91)||(lit>96 && lit<123)){
flaga = true;
znak = lit;
}
else flaga = false;
}

bool getFlag(Lancuch& x){
return x.flaga;
}

char getChar(Lancuch& x){
return x.znak;
}
head.h
#ifndef hhead
#define hhead

#include
#include
#include
using namespace std;

class Lancuch{
protected:
bool flaga;
bool znak;
public:
Lancuch(char);
friend bool getFlag(Lancuch&);
friend char getChar(Lancuch&);
};

bool getFlag(Lancuch&);
char getChar(Lancuch&);

#endif
W wyniku dzialania programu dostaję od razu informację "to nie jest litera". Bez czekania na wprowadzenie jakichkolwiek danych przez użytkownika.

Czy ktoś mógłby mi podpowiedzieć jak rozwiązać ten problem?

Pozdrawiam
Mal.

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
getch() ncurses.h
« Odpowiedź #1 dnia: 2012-02-16, 14:24:07 »
Teraz jesteś w trybie "no-delay", czyli w przypadku braku znaku do wczytania zwraca wartość ERR.

Wyłącz tryb "no-delay":
nodelay(stdscr,0);

Mal

  • Gość
getch() ncurses.h
« Odpowiedź #2 dnia: 2012-02-16, 14:53:22 »
Dziękuję Ci ślicznie za odpowiedź.

Po wstawieniu delay "prawie" poprawnie działa pierwsza pętla programu. Na ten moment jednak nie zawracam więcej głowy i spróbuję pójść tym tropem przy następnym posiedzeniu, bo teraz już czas do domu i fajrant ;) Chociaż zapewne jeszcze nie raz będę zmuszona korzystać z Waszej pomocy.

Dziękuję jeszcze raz.
Pozdrawiam
Mal