IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Ukončení standardního vstupu po stisku kláves CTRL-Z / CTRL - D

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Martin Tam
Člen
Avatar
Martin Tam:8.11.2017 1:40

Ahoj, chtěl bych se zeptat jak bych dosáhl v Céčku toho, aby se program ukončil až uživatel sám ukončí standardní vstup stiskem klávesové zkratky CTRL-Z případně CTRL-D. Do té doby by mohl neustále zadávat vstupní hodnoty a program by pracoval normálně. Díky.

 
Odpovědět
8.11.2017 1:40
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Martin Tam
DarkCoder:8.11.2017 8:37

Kombinace CTRL-Z patří mezi řídící znaky. Dle ASCII má hodnotu 26 (dec), 032 (oct), x1A (hex).
Hodnotu si můžeš nadefinovat např:

#define CTRL_Z '\032'

a na tuto hodnotu testovat.
Je třeba myslet na to, že se jedná o znakovou konstantu nikoli řetězec.

Nahoru Odpovědět
8.11.2017 8:37
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Martin Tam
Petr Čech:8.11.2017 11:16

Ha, řešitel Progtestu :D (spletl jsem se?)
Pokud načítáš pomocí scanf, tak to vrací int. Buď je to počet povedených konverzí, nebo něco jiného. Mezi to ostatní patří konstanta EOF, což značí konec vstupu, buď právě pomocí CTRL+D/Z nebo konec souboru ze stdin.

Nahoru Odpovědět
8.11.2017 11:16
the cake is a lie
Avatar
Martin Tam
Člen
Avatar
Odpovídá na Petr Čech
Martin Tam:8.11.2017 14:40

Nespletl :-D Snad mě někdo nezabije, když se neptám na celé řešení, ale jenom její části :-D :-D Díky za odpověď ;-)

Editováno 8.11.2017 14:41
 
Nahoru Odpovědět
8.11.2017 14:40
Avatar
DarkCoder
Člen
Avatar
DarkCoder:8.11.2017 16:19

Pro slušně se dotazující i pro bezdůvodně mínusující:

#include <stdio.h>
#include <conio.h>
#define CTRL_Z '\032'
char c;

do {
        if ((c = _getch()) > 31) putchar(c);
        // ...
} while (c != CTRL_Z);
Nahoru Odpovědět
8.11.2017 16:19
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na DarkCoder
Petr Nymsa:8.11.2017 22:53

A co CTRL-D, EOF pokud se vstup čte ze souboru?

Nahoru Odpovědět
8.11.2017 22:53
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.