C/Pierwszy program: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Kj (dyskusja | edycje)
ARGH! getch tylko jako ciekawostka
Kj (dyskusja | edycje)
d
Linia 67:
</source>
Funkcja ta jest o wiele bardziej pomocna w systemach operacyjnych Windows w których to z reguł pracuje się w trybie okienkowym a z konsoli korzystamy tylko podczas uruchamianiu programu. Z kolei w systemach Unix/Linux jest ona praktycznie w ogóle nie używana w tym celu, ze względu na uruchamianie programu bezpośrednio z konsoli.
{{infobox|Istnieje jeszcze jeden, jeszcze prostszy sposób:
<source lang="C">
getch(); /* oczekiwanie na wciśnięcie jakiegoś klawisza */
</source>
Jest to jednak funkcja spoza specyfikacji języka C, obecna np. w kompilatorach firmy Borland. W systemach z rodziny Unix jej użycie związane jest z dołączeniem biblioteki ncurses. Ewentualnie, możemy stworzyć własną funkcję getch() reagującą na naciśnięcie dowolnego klawisza. Oto kod:
<source lang="C">
#include <stdio.h>
#include <unistd.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
 
{{infobox|Niektóre podręczniki używają w zamian funkcji getchar() funkcję getch(), jednak jest ona niezgodna ze standardem definiującym C, zależy od wielu czynników takich, jak system operacyjny i dostępność niektórych bibliotek. Dlatego też nie zalecamy jej używania.}}
int getch (void)
{
int desc;
struct termios new, old;
int key;
desc = open(ctermid(0), O_RDWR);
tcgetattr(desc,&old);
new = old;
if (new.c_lflag & ICANON) {
new.c_lflag &= ~ICANON;
}
if (new.c_lflag & ECHO) {
new.c_lflag &= ~ECHO;
}
new.c_cc[VTIME] = 0;
new.c_cc[VMIN] = 1;
tcsetattr(desc, TCSANOW, &new);
key = getchar();
tcsetattr(desc, TCSANOW, &old);
return key;
}
</source>
}}
<noinclude>
{{przypisy}}