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ů

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ář

13.2.2018 0:41 /František Kučera
Únorový pražský sraz OpenAltu se koná 15. 2. 2018 a tentokrát se vydáme na návštěvu do jednoho pražského datacentra. Sejdeme se v 17:50 v severovýchodní části nástupiště tramvajové zastávky Koh-I-Noor. Po exkurzi se přesuneme do restaurace U Pštrosa (Moskevská 49), kde probereme tradiční témata (svobodný software a hardware, DIY, CNC, SDR, 3D tisk…) a tentokrát bude k vidění i IoT brána od The Things Network.
Přidat komentář

11.2.2018 23:11 /Petr Ježek
Hledáte lehký a rychlý prolížeč PDF souborů? Pokud vás již omrzelo čekat na načítání stránek či jiné nešvary, zkuste xreader.
Přidat komentář

11.2.2018 20:35 /Redakce Linuxsoft.cz
Třetí ročník odborné IT konference na téma Cloud computing v praxi proběhne ve čtvrtek 1. března 2018 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00 hod. dopoledne do cca 16 hod. odpoledne. Konference o trendech v oblasti cloud computingu nabídne i informace o konkrétních možnostech využívání cloudů a řešení vybraných otázek souvisejících s provozem IT infrastruktury.
Přidat komentář

15.1.2018 0:51 /František Kučera
První letošní pražský sraz se koná již tento čtvrtek 18. ledna od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Vítáni jsou všichni příznivci svobodného softwaru a hardwaru, ESP32, DIY, CNC, SDR nebo dobrého piva. Prvních deset účastníků srazu obdrží samolepku There Is No Cloud… just other people's computers. od Free Software Foundation.
Přidat komentář

14.11.2017 16:56 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt – tradičně první čtvrtek před třetím pátkem v měsíci: 16. listopadu od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).
Přidat komentář

12.11.2017 11:06 /Redakce Linuxsoft.cz
PR: 4. ročník odborné IT konference na téma Datová centra pro business proběhne již ve čtvrtek 23. listopadu 2017 v konferenčním centru Vavruška, v paláci Charitas, Karlovo náměstí 5, Praha 2 (u metra Karlovo náměstí) od 9:00. Konference o návrhu, budování, správě a efektivním využívání datových center nabídne odpovědi na aktuální a často řešené otázky, např Jaké jsou aktuální trendy v oblasti datových center a jak je využít pro vlastní prospěch? Jak zajistit pro firmu či jinou organizaci odpovídající služby datových center? Podle jakých kritérií vybrat dodavatele služeb? Jak volit součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně spravovat datové centrum? Jak eliminovat možná rizika? apod.
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