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

Dodane 843 bajty ,  14 lat temu
ARGH! getch tylko jako ciekawostka
(wiel osób narzeka na getch)
(ARGH! getch tylko jako ciekawostka)
</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 (choć nieprofesjonalny):
 
Istnieje jeszcze jeden, jeszcze prostszy sposób (choć nieprofesjonalny):
<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>
 
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}}
1838

edycji