LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Diskuze: článek C/C++ (10) - Standardní vstup a výstup

jeden znak
(link)
28.12.2004 18:39
p f
Věk: ( ~33 let)

Hezky serial, ale ja bych potreboval reagovat rovnou na klavesu (bez entru), je to mozne?
Predem dekuji za navrhy

Re: jeden znak
(link)
29.12.2004 09:36
Jan Němec
Věk: ( ~41 let)

Pokud vím ve standardním C to nejde. (Pokud se pletu, opravte mě někdo.) V DOSu se to řešilo pomocí nestandardních funkcí z conio.h, na linuxové konzoli jsem to nikdy neřešil.

Re: jeden znak
(link)
1.1.2005 20:19
Aleš Hakl
Bydliště: Praha

Ve standardnim C to jde, v DOSu to pokud vim standardni cestou nejde.

pokud pouzivate <stdio.h>, kouknete se na funkce fgetc(3), getc(3) a getchar(3)

druha moznost jak to resit je primo bez <stdio.h> volanim read(2), ve stylu:

char znak;
read(0,&znak,1);

Nutno podotknout, ze neni vhodne oba pristupy kombinovat v jednom programu.

Re: jeden znak
(link)
1.1.2005 20:34
Aleš Hakl
Bydliště: Praha

No, ja zase nemyslim.

Jak jsem uvedl vyse to samozrejme funguje, ale:

Pred tim nez prijde vstup programu, ceka terminal na enter nez neco vubec posle. Toto chovani je mozne vypnout, jak je popsano napriklad zde: http://ou800doc.caldera.com/en/SDK_sysprog/_TTY_in_Raw_Mode.html

Dalsi (lepsi, portabilnejsi) moznosti je pouzit knihovny curses (ncurses) a jeji funkce getch(3X), jez osetruje i specialni klavesy.

Re: jeden znak
(link)
4.10.2007 15:21
Jan Němec
Věk: ( ~41 let)

Četl jsem si knížku "Učíme se programovat v jazyce Assembler pro PC" a náhodou jsem tam našel řešení, které jsem převedl do C. Je třeba nastavit standardnímu vstupu (file descriptor 0), aby nečekal na enter. To se dělá obecnou funkcí ioctl. Načtu si vlastnosti pomocí TCGETS, změním jeden příznak a změnu nastavím pomocí TCSETS. Ne, že by se mi podobný styl programování líbil, ale funguje to. Jen nevím, jestli to po třech letech ještě někoho zajímá.

#include <unistd.h>
#include <termios.h>
#include <sys/ioctl.h>

int main(void) {
int i;
char buf[1024];
struct termios t;

ioctl(0, TCGETS, &t);
t.c_lflag &= ~ICANON;
ioctl(0, TCSETS, &t);
i = read(0, (void *) buf, sizeof(buf));
write(1, (void *) buf, i);
return 0;
}

Re: jeden znak
(link)
4.10.2007 16:20
Aleš Hakl
Bydliště: Praha

Tohle je ramcove totey jako na tom mem odkazu vyse. K tomuto bych ovsem mel dve poznamky:

Volat primo ioctl(2) asi neni uplne nejlepsi cesta, jelikoz existuji funkce tcsetattr a tcgetattr, ktere delaji prakticky totez + funkce pro snadnejsi pristup k tomu, co je uvnitr struct termios.

Dalsi vec je, ze je pomerne vhodne si to puvodni termios nekam ulozit a na konci programu opet obnovit.

Re: jeden znak
(link)
4.10.2007 17:13
Jan Němec
Věk: ( ~41 let)

On ten odkaz nefunguje, aspon mne ne. Coz vzhledem k serveru caldera.com asi neni tak prekvapive.

Re: jeden znak
(link)
14.3.2014 22:09
xerostomus

Toto ale funguje, ale ne pro široke znaky, tedy prodiakritiku.
Zkousel jsem knihovnu Wchar.h a taky to nešlo:
Vubec jsem překvapen, jak se to ukazalo byt slozitym problemem.
Nasleduje popis v Anglictine.

#include <stdio.h>
#include <wchar.h>

int main ()
{
wchar_t wc;
fputws (L"Enter text. Include a dot (.) in a sentence to exit:\n",stdout);
do {
wc=getwchar();
putwchar (wc);
} while (wc != L'.');
return 0;
}

I simply copied your example and got following problem:
1) processor got occupied to 100 %
2)compiled that and got this strange behavior:
Enter text. Include a dot (.) in a sentence to exit:
a
a //correctly repeated twice
s
s
d
d
ě //stopped echoing on wide characters
š
č
a //echoing is still off
s
d
. //event dot is not terminating
.
.
.
.
^C //I had to kill it

My problem is a teaching program - I need my program wait for a wide character then check it whether a student put a correct character. If correct put it out on screen (stout), if incorrect be silent, do not put anything at the screen.
say "Copy word: řečiště"
řeči
if the student writes s instead of š, it will not go on in completing the word.


DISKUZE

jeden znak 28.12.2004 18:39 p f
  |- Re: jeden znak 29.12.2004 09:36 Jan Němec
  | L Re: jeden znak 1.1.2005 20:19 Aleš Hakl
  |   L Re: jeden znak 1.1.2005 20:34 Aleš Hakl
  L Re: jeden znak 4.10.2007 15:21 Jan Němec
    |- Re: jeden znak 4.10.2007 16:20 Aleš Hakl
    | L Re: jeden znak 4.10.2007 17:13 Jan Němec
    L Re: jeden znak 14.3.2014 22:09 xerostomus




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

16.7.2018 1:05 /František Kučera

Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.


Přidat komentář

18.6.2018 0:43 /František Kučera
Červnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 21. 6. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: F-Droid, aneb svobodný software do vašeho mobilu. Kromě toho budou k vidění i vývojové desky HiFive1 se svobodným/otevřeným čipem RISC-V.
Přidat komentář

23.5.2018 20:55 /Ondřej Čečák
Od pátku 25.5. proběhne na Fakultě informačních technologií ČVUT v Praze openSUSE Conference. Můžete se těšit na spostu zajímavých přednášek, workshopů a také na Release Party nového openSUSE leap 15.0. V na stejném místě proběhne v sobotu 26.5. i seminář o bezpečnosti CryptoFest.
Přidat komentář

20.5.2018 17:45 /Redakce Linuxsoft.cz
Ve čtvrtek 31. května 2018 připravuje webový magazín BusinessIT ve spolupráci s Best Online Média s.r.o. pátý ročník odborné konference Firemní informační systémy 2018. Akce proběhne v kongresovém centru Vavruška (palác Charitas), Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 15 hod. odpoledne. Konference je zaměřena na efektivní využití firemních informačních systémů a na to, jak plně využít jejich potenciál. Podrobnější informace na webových stránkách konfrence.
Přidat komentář

14.5.2018 7:28 /František Kučera
Květnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 17. 5. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát na téma: Audio – zvuk v GNU/Linuxu.
Přidat komentář

7.5.2018 16:20 /František Kučera
Na stránkách spolku OpenAlt vyšla fotoreportáž Pražské srazy 2017 dokumentující srazy za uplynulý rok. Květnový pražský sraz na téma audio se bude konat 17. 5. 2018 (místo a čas ještě upřesníme).
Přidat komentář

17.4.2018 0:46 /František Kučera
Dubnový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 4. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tématem tohoto srazu bude OpenStreetMap (OSM) aneb svobodné mapy.
Přidat komentář

16.3.2018 22:01 /František Kučera
Kulatý OpenAlt sraz v Praze oslavíme klasicky: u limonády a piva! Přijďte si posedět, dát si dobré jídlo a vybrat z mnoha piv do restaurace Kulový blesk, který najdete v centru Prahy nedaleko metra I. P. Pavlova na adrese Sokolská 13, Praha 2. Sraz se koná ve čtvrtek 22. března a začínáme v 18:00. Heslo: OpenAlt. Vezměte s sebou svoje hračky! Uvítáme, když si s sebou na sraz vezmete svoje oblíbené hračky. Jestli máte nějaký drobný projekt postavený na Arduinu, nějakou zajímavou elektronickou součástku, či třeba i pěkný úlovek z crowdfundingové akce, neváhejte. Oslníte ostatní a o zábavu bude postaráno.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

20.2.2018 18:48 / Ivan Majer
portal

20.2.2018 15:57 / Jan Havel
Jak využíváte služby cloudu v podnikání?

16.1.2018 1:08 / Ivan Pittner
verejna ip od o2 ubuntu

15.1.2018 17:26 / Mira Harvalik
Re: Jak udělat HTML/Javascript swiping gallery do mobilu?

30.12.2017 20:16 / Michal Knoll
odmocnina

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2018) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze