Aktualności Forum Graffiti Publicystyka Teleport
  • Kurs języka C - część 4

20.02.2005 13:59, autor artykułu: Grzegorz "Y-Greg" Tarka
odsłon: 15419, powiększ obrazki, wersja do wydruku,

W dzisiejszm odcinku naszego kursu zajmiemy się między innymi pobieraniem znaków z klawiatury.

FUNKCJA GETCHAR I PUTCHAR

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);
}


Kurs C 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

Kurs C EOF czyli inaczej "end of file" to wartość zdefiniowana w pliku nagłówkowym , która oznacza koniec pliku. Gdy wejście jest już puste funkcja getchar zwraca właśnie charakterystyczną wartość zwaną EOF. Jest tylko jeden warunek. Typ zmiennej, w której będą przechowywane dane musi być typu int (liczby), dlatego że oprócz wszystkich wartości typu char (znaki), nasza zmienna musi mieć także miejsce dla wartości EOF. Oto mały program wypisujący wartość EOF:

#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.

    
1 komentarzostatni: 29.12.2012 10:10
Na stronie SCENA.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem