jeden znak (link) |
28.12.2004 18:39
p f
|
Věk: ( ~39 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: ( ~47 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: ( ~47 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: ( ~47 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.
|
|
|
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
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ář
Více ...
Přidat zprávičku
Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|