Forum Informatyka UJ forum Strona Główna Informatyka UJ forum
Rocznik 2005 - czyli najlepsze forum w sieci
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

[C/C++] Wczytywanie z konsoli

 
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stasiu
zielony żul



Dołączył: 16 Lis 2005
Posty: 920
Przeczytał: 0 tematów

Skąd: krk

PostWysłany: Wto 1:50, 19 Gru 2006    Temat postu: [C/C++] Wczytywanie z konsoli

Mam pytanie.

Potrzebuje sposob na skonstruowanie petli while, ktora sobie bedzie normalnie leciala, ale w momencie nacisniecia przycisku klawiatury wczyta mi wpisana wartosc? moze to byc pojedynczy znak, nawet nie musi byc potwierdzony enterem.

Ktoś pomoże? :P
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Madras
Omylny Admin



Dołączył: 09 Lis 2005
Posty: 2021
Przeczytał: 0 tematów

Skąd: Z Pokoju :]

PostWysłany: Wto 2:25, 19 Gru 2006    Temat postu:

Hmm...
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stasiu
zielony żul



Dołączył: 16 Lis 2005
Posty: 920
Przeczytał: 0 tematów

Skąd: krk

PostWysłany: Wto 2:27, 19 Gru 2006    Temat postu:

nooo, chyba nawet w paszczaku sie to dalo zrobic :p Bylo cos jak "keypressed;" ;)
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Wto 2:28, 19 Gru 2006    Temat postu:

pod pascalem robilo sie to tak
repeat
{akcja}
if port[$80] <> 0 then
begin
ch:=readkey;
{obsluga klawisza}
end;
until false;
Ale:

1. to jest Pascal, a nie C
2. to jest stare rozwiazanie DOSowe.

Ogolnie pewnie trzeba bedzie sprawdzac jakos asmem stan bufora klawiatury, lub przekierowac standardowe wejscie jakos... Nie wiem

Ale moze cos pomoze, choc marne szanse...
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stasiu
zielony żul



Dołączył: 16 Lis 2005
Posty: 920
Przeczytał: 0 tematów

Skąd: krk

PostWysłany: Wto 2:31, 19 Gru 2006    Temat postu:

a strumienie? cos mi swita z funkcja istream::peek(), ale nie do konca wiem jak dziala i nie bardzo przychodzi mi do glowy rozwiazanie ;p Jest jeszcze funkcja C kbhit, ale jak sie nacisnie klawisz chociaz raz, to juz do konca zwraca true. A jak sie czysci bufor w C to nie wiem :/
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Madras
Omylny Admin



Dołączył: 09 Lis 2005
Posty: 2021
Przeczytał: 0 tematów

Skąd: Z Pokoju :]

PostWysłany: Wto 2:32, 19 Gru 2006    Temat postu:

Spróbuj tego:
Kod:
#include <conio.h>
#include <cstdio>

int main() {

   while( 1 ) {
      if( kbhit() )
         printf( "%d\n", getch() );
   }
}
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stasiu
zielony żul



Dołączył: 16 Lis 2005
Posty: 920
Przeczytał: 0 tematów

Skąd: krk

PostWysłany: Wto 2:33, 19 Gru 2006    Temat postu:

probowalem, patrz post wyzej :p

EDIT: chwile...
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stasiu
zielony żul



Dołączył: 16 Lis 2005
Posty: 920
Przeczytał: 0 tematów

Skąd: krk

PostWysłany: Wto 2:36, 19 Gru 2006    Temat postu:

fuck :/
@Madras: rzeczywiscie dziala... nie wiem jak ja to sprawdzalem :o dzieki i sorry za zamieszanie.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
exeman
Mistrz grilla



Dołączył: 03 Lut 2006
Posty: 1603
Przeczytał: 0 tematów

Skąd: znienacka

PostWysłany: Wto 3:09, 19 Gru 2006    Temat postu:

Stasiu, bo pewnie kbhit sie czysci po getc :)

conio to ponoc bilioteka borlandowska, nie standardowa. podobno takze nie pojdzie to na linuxach. tam mozna to napewno zrobic selectami, ale to juz jest troche bardziej zamotane, za to dobrze opisane na googlach.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stasiu
zielony żul



Dołączył: 16 Lis 2005
Posty: 920
Przeczytał: 0 tematów

Skąd: krk

PostWysłany: Wto 3:16, 19 Gru 2006    Temat postu:

exeman napisał:
Stasiu, bo pewnie kbhit sie czysci po getc
lol, ale debil ze mnie ;) fakt. Najciekawsze jest to ze kiedys chyba o tym slyszalem/czytalem, ale jakos tego nie skojarzylem :p
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Madras
Omylny Admin



Dołączył: 09 Lis 2005
Posty: 2021
Przeczytał: 0 tematów

Skąd: Z Pokoju :]

PostWysłany: Wto 3:20, 19 Gru 2006    Temat postu:

Ale bufor powinien się wyczyścić po jakimkolwiek zczytaniu wejścia, nie tylko po getc'ie.

Inna sprawa, że nie bardzo wiem, jak inaczej pobrać pojedyńczy znak z wejścia bez czekania na enter nie korzystając z getch'a ;P.

EDIT:
Kod:
#include <conio.h>
#include <cstdio>

int main() {

   for( char k; 1; ) {
      if( kbhit() ) {   
         scanf( "%c", &k );
         printf( "%c\n", k );
      }
   }
}

Ten przykład pokazuje, że najprawdopodobniej kbhit mówi, czy na konsoli znajdują się jakiekolwiek znaki, które jeszcze nie zostały zczytane do bufora programu. Bo inaczej tego wyjaśnić nie potrafię ;p.
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
oinopion
żul



Dołączył: 28 Lis 2005
Posty: 858
Przeczytał: 0 tematów

Skąd: Kraków

PostWysłany: Wto 9:55, 19 Gru 2006    Temat postu:

polecam ncurses [dla linuksow].
Powrót do góry
Zobacz profil autora
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Stefan
pijak



Dołączył: 22 Lis 2005
Posty: 173
Przeczytał: 0 tematów


PostWysłany: Wto 10:52, 19 Gru 2006    Temat postu:

Nie da się zrobić tego przenośnie. Standardowymi strumieniami ani funkcjami z stdio się tego nie zrobi, bo wejście leci do bufora po naciśnięciu Entera.
W Borlandzie powinien być nagłówek conio.h, który ma wszystko to samo, co miał Turbo Pascal. W MinGW jest nagłówek conio.h, ale tam zdaje się jest tylko parę funkcji (w tym kbhit()).
Rozwiązanie z asemblerem będzie działać najprawdopodobniej tylko pod DOSem (w programie skompilowanym dla DOSa - czyli teraz pewnie DJGPP), bo Windows najprawdopodobniej wywali taki program.
Rozwiązanie, to na Linuksie - podane przez oinopiona - ncurses, na Windowsie i innych - PDCurses. Wersja PDCurses jest ZTCW bardzo zgodna z ncurses, więc będzie to pewnie kwestia wyłącznie zmiany nazwy #include'a i dołączenia odpowiednich bibliotek.
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Informatyka UJ forum Strona Główna -> Archiwum / 1 rok / 2 i 3 semestr - Programowanie Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach

fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
Regulamin