ANSI C 1

ANSI C 1



7 WEJŚCIE I WYJŚCIE

Najprostszym mechanizmem wejścia jest czytanie po jednym znaku ze standardowe go wejścia, zwykle klawiatury, za pomocą funkcji getchar:

int getchar(void);

Funkcja ta przy każdym wywołaniu podaje następny znak z wejścia lub EOF, gdy napotkała koniec pliku. Stała symboliczna EOF jest zdefiniowana w nagłówku <stdio.h>. Jej wartością jest na ogół —1, ale w testach należy używać EOF, aby uniezależnić się od takiej specyficznej wartości.

W wielu środowiskach klawiaturę można zastąpić plikiem, stosując konwencję przełączania źródła danych za pomocą symbolu <. Jeśli program próg używa funkcji getchar, to wywołujące ten program polecenie

próg cinfile

spowoduje, że próg będzie czytał znaki z pliku infile, a nie z klawiatury. Przełączenie źródła danych następuje tak, że program nie odczuwa zmiany; w szczególności tekst „<infile” nie jest dołączany do listy argv argumentów wywołania programu. Przełączenie źródła danych jest również niewidoczne wówczas, gdy dane wejściowe napływają z innego programu przez potok (ang. pipe)\ w pewnych systemach polecenie


otherprog | próg

uruchamia dwa programy otherprog i próg, łącząc potokiem standardowe wyjście otherprog ze standardowym wejściem próg.

Funkcja

int putchar(int)

służy do wypisywania danych: wywołanie putchar(c) wysyła znak c do standardowego wyjścia, którym domyślnie jest ekran. Funkcja ta zwraca wartość wypisanego znaku lub EOF (jako sygnał wystąpienia błędu). Wyniki można także kierować do pliku używając symbolu >: jeśli program próg korzysta z funkcji putchar, to polecenie

próg >outfile

spowoduje, że próg zamiast do standardowego wyjścia będzie pisać do pliku outfile Jeżeli system udostępnia potoki, to w poleceniu

próg | anotherprog

standardowe wyjście próg zostanie połączone potokiem ze standardowym wejścia programu anotherprog.    ' 5

Dane produkowane przez funkcję printf również są kierowane do wyjścia. Wywołania putchar i printf mogą się przeplatać - wyniki pojawią się na wyjściu zgodnie z kolejnością tych wywołać.

W każdym pliku źródłowym programu, który korzysta z funkcji bibliotecznych realizujących operacje wejścia-wyjścia, przed pierwszym odwołaniem do biblioteki musi wystąpić wiersz

#include <stdio.h>

Gdy nazwa nagłówka jest ujęta w nawiasy < i >, wówczas tego nagłówka szuka się w miejscach standardowo wyróżnionych (np. w systemach Unix zwykle jest to skorowidz /usr/include).

Wiele programów czyta zaledwie jeden strumień danych wejściowych i produkuje jeden strumień danych na wyjściu. Dla takich programów mechanizm wejścia-wyjścia z użyciem funkcji getchar, putchar i printf w zupełności wystarczy. A już na pewno wystarczy początkującym programistom, zwłaszcza gdy używają mechanizmu przełączania oraz mechanizmu potoków do łączenia wyjścia jednego programu z wejściem następnego. Jako przykład rozważmy program lower, który przekształca wielkie litery tekstu wejściowego na małe:

#include <stdio.h>

#include <ctype.h>

main() /* lower: zamień wielkie litery na małe */

{

int c;

while ((c = getcharf)) 1= EOF) putchar(tolower(c)); return 0;

}

Funkcja tolower jest zdefiniowana w nagłówku <ctype.h>; przekształca ona wielkie •‘tery na małe nie zmieniając innych znaków. Jak wspomnieliśmy wcześniej, takie ..funkcje”, jak getchar i putchar z nagłówka <stdio.h> oraz tolower z nagłówka <etype.h>, często są makrami, co pozwala uniknąć narzutów, jakie wiążą się z wysłaniem funkcji dla każdego znaku. Jak to zostało zrobione, pokażemy w p. 8.5. Niezależnie od tego, jak funkcje z nagłówka <ctype.h> zostały zrealizowane w kon-

205


Wyszukiwarka

Podobne podstrony:
ANSI C 1 7 WEJŚCIE I WYJŚCIE W punkcie 8.7 pokażemy taką realizację dystrybutora pamięci podobnego
ANSI C 1 6 STRUKTURY /* getword: weź następne słowo lub znak z wejścia */ int getword(char *word,
ANSI C 2 7 WEJŚCIE I WYJŚCIE_______- kretnej maszynie, programom z nich korzystającym oszczędzono
ANSI C 3 7 WEJŚCIE I WYJŚCIE ____ ________ printf(s);    /* ŹLE, jeśli w s występuj
ANSI C 5 7 WEJŚCIE I WYJŚCIE______ tabulacji, znak nowego wiersza, znak powrotu karetki, znak tabu
ANSI C 6 7 WEJŚCIE I WYJŚCIE_______ Ćwiczenie 7.5. Napisz na nowo program kalkulatora przyrostkowe
ANSI C 7 7 WEJŚCIE I WYJŚCIE ^ OBSŁUGA BŁĘDÓW - PLIK STDERR I FUNKCJA EXIT Funkcje getchar i putch
ANSI C 8 7 WEJŚCIE I WYJŚCIE #include <stdio.h> /* cat: sklej zawartość plików, wersja 2 */
ANSI C 9 7 WEJŚCIE I WYJŚCIE Aby wykazać, że nie ma nic magicznego w takich funkcjach, jak fgets i
ANSI C 0 7 WEJŚCIE I WYJŚCIE 7.8.2 Badanie klasy znaków i ich przekształcenia Wiele funkcji ze sta
rozwojówka ćw ( 04 09 i 5 05 091 _D o cl a w a n i e jest najprostszą formą kumulowania się kolejn
25375 rozwojówka ćw ( 04 09 i 5 05 091 _D o cl a w a n i e jest najprostszą formą kumulowania się
pety moje opracowania5 Na schemacie blokowym niezawodności każdy z elementów przedstawiony jest w p
25375 rozwojówka ćw ( 04 09 i 5 05 091 _D o cl a w a n i e jest najprostszą formą kumulowania się
golf1 JazdaJazda spokojna, niehałaśliwa. Użycie samochodu jest - również przy zastosowaniu nowoczes
Image468 Rozdzielacze zwykle Najprostszym rozdzielaczem zwykłym jest licznik pierścieniowy (rys. 4.5

więcej podobnych podstron