W dzisiejszm odcinku naszego kursu zajmiemy się między innymi pobieraniem znaków z klawiatury.
Każdy tekst który jest pobierany czy to z pliku, czy z klawiatury jest związany ze strumieneiem znaków, który jest po prostu ciągiem znaków podzielonych na wiersze. Każdy wiersz moze zawierać zero lub więcej znaków po których jest znak nowego wiersza. Pisząc programy w C nie musimy się troszczyć o to, jak wiersze są reprezentowane gdyż robi to za nas biblioteka standardowa (stdio.h). Dziś będziemy analizować funkcję getchar(), pochodzącą ze standardowej biblioteki. Kiedy wywołujemy funkcję getchar, to ona pobiera ze strumienia znaków następny znak i wraca z jego wartością:
c = getchar();
Po tej instrukcji zawartością zmiennej "c" stanie się następny znak z wejścia. Istnieje jeszcze funkcja putchar(), która wypisuje jeden znak na wyjście, czyli na ekran (a konretniej do konsoli).
putchar(c);
Komenda ta spowoduje wypisanie zawartości zmiennej c jako jednego znaku. Możemy teraz napisać prosty programik:
#include <stdio.h> main() { char znak; /* Pytanie o liczbę */ printf("Podaj liczbę od 1 do 9: "); znak = getchar(); printf("nTo jest ta liczba:"); putchar(znak); printf("\n"); return(0); }
Program ten pyta o liczbę z przedziału od 1 do 9 (ponieważ na razie musi
być to jeden znak), a następnie wypisuje go na ekranie. Jeśli zamiast
liczby podamy jakiś znak np: literę "r", to także zostanie on
wypisany. Na początku programu tworzymy zmienną "znak", która jest typu
char, następnie funkcją printf wypisujemy tekst. Zauważ że na końcu
tekstu nie ma znaku "\n" (znak nowego wiersza), gdyż kursor stawiany
będzie tuż za naszym napisem proszącym o liczbę. Dalej funkcją getchar()
przypisujemy zmiennej "znak" wartość ze strumienia znaków
(klawiatury). Następnie funkcja printf przenosi kursor do nowego
wiersza (\n) i wypisuje tekst na końcu którego zostawiany jest kursor
(nie ma znaku "\n", czyli kursor nie jest przenoszony do nowego
wiersza), po to żeby funkcja putchar mogła w tym miejscu wypisać
zawartość zmiennej "znak". Dalej jest jeszcze funkcja printf, która
przenosi kursor do nowego wiersza, aby po zakończeniu programu okno
shell wyglądało bardziej estetycznie. Spróbujcie nie pisać tej funkcji
żeby zobaczyć co się stanie. Na samym końcu jest funkcja return, która
powoduje zakończenie wykonywania programu.
Zmodyfikujmy teraz nasz program:
#include <stdio.h> main() { char znak; /* Pytanie o liczbę */ printf("Podaj liczbę od 1 do 9: "); znak = getchar(); printf("\nOto ta liczba:"); /* wypisz liczbę */ putchar(znak); printf("\nTeraz wpisz coś,a program przepisze to.\n"); printf("Kiedy wpiszesz 'q',to nastąpi wyjście z programu\n"); /* pętla */ while(znak != 'q' ){ znak = getchar(); printf("\n"); putchar(znak); } printf("\nKoniec!!! Nacisnąłeś klawisz 'q'\n"); return(0); }
Do programu została dołączona pętla while, w której sprawdzany jest warunek (znak != 'q'), co oznacza że pętla będzie wykonywana dopóki zmienna "znak" będzie różna od litery q. Zamiast litery q można spróbować wstawić tam inną literę, która będzie zatrzymywać program. Czasem w takich sytuacjach używa się np: "\n", co oznacza znak nowego wiersza, czyli naciśnięcie klawisza enter, np.
while(znak != 'n'){ ... ... }
oznacza że pętla będzie wykonywana dopóki zmienna "znak" będzie różna od 'n', czyli będzie wciśnięty klawisz enter.
Dalej w naszym programie w pętli przepisywane jest wejście na wyjście przy użyciu funkcji getchar i putchar. Funkcja printf przenosi kursor do nowego wiersza ( printf("\n");). Jeżeli warunek pętli zostaje przerwany (czyli zostaje wciśnięty klawisz q) to program wypisuje na ekranie tekst końcowy "Koniec!!! Nacisnąłeś klawisz 'q'". Potem jest już tylko funkcja return, która kończy działanie programu. Zmodyfikujmy nasz program:
#include <stdio.h> main() { char znak; /* Pytanie o liczbę */ printf("Podaj liczbę od 1 do 9: "); znak = getchar(); printf("\nOto ta liczba:"); /* wypisz liczbę */ putchar(znak); printf("\nTeraz wpisz coś,a program przepisze to.\n"); printf("Kiedy wpiszesz 'q',to nastąpi wyjście z programu\n"); /* pętla */ while((znak=getchar()) != 'q' ){ printf("\n"); putchar(znak); } printf("\nKoniec!!! Nacisnąłeś klawisz 'q'\n"); return(0); }
Popatrzmy teraz na zmienioną pętle. Między nawiasami okrągłymi sprawdzany jest warunek "((znak=getchar()) != 'q')", co oznacza że jeżeli wartość funkcji getchar (znak=getchar()) jest różna (!=) od litery q ('q') to pętla zakończy swe działanie. Wyrażenie "znak=getchar()" ma jakąś wartość, a tą wartościa jest tutaj to co funkcja getchar przekaże zmiennej "znak", a więc jeżeli tą wartością będzie litera q, to nastąpi koniec pętli.
EOF czyli inaczej "end of file" to wartość zdefiniowana w pliku
nagłówkowym
#include <stdio.h>
main()
{
printf("Wartość EOF to:%d\n",EOF);
return(0);
}
I to by było tyle na dzisiaj. W następnym odcinku zajmiemy się funkcją if oraz tablicami. Na koniec jeszcze jedna sprawa: Warto takża wiedzieć że źródła w języku C, które będą interpretowane przez kompilator VBCC (a także inne kompilatory) powinny mieć nazwę z końcówką .c ,np:
program.c test.c
Inaczej kod źrodłowy nie zostanie zinterpretowane przez kompilator.