C/Podstawowe procedury wejścia i wyjścia: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
m =
Linia 15:
Zanim będzie można odczytywać lub zapisywać zawartość pliku, należy ustanowić połączenie lub kanał komunikacji z plikiem. Ten proces nazywa się otwieraniem pliku. Możesz otworzyć plik do odczytu, zapisu lub obu. Połączenie z otwartym plikiem jest reprezentowane jako [[C/strumien|strumień]] lub [[C/Czytanie_i_pisanie_do_plików|deskryptor pliku]]. Przekazujesz to jako argument do funkcji, które wykonują rzeczywiste operacje odczytu lub zapisu, aby powiedzieć im, na którym pliku mają działać. Niektóre funkcje oczekują strumieni, a inne są zaprojektowane do działania na deskryptorach plików. Po zakończeniu wczytywania lub zapisywania pliku można zakończyć połączenie, zamykając plik. Po zamknięciu strumienia lub deskryptora pliku nie można już wykonywać na nim żadnych operacji wejścia ani wyjścia.
 
== Funkcje wyjścia ==
 
===Funkcje FunkcjaI/O printf ===
=== Funkcje wyjścia ===
 
==== Funkcja printf ====
 
W [[C/Pierwszy_program|przykładzie "Witaj świecie!"]] użyliśmy już jednej z dostępnych funkcji wyjścia, a mianowicie funkcji printf(). Z punktu widzenia swoich możliwości jest to jedna z bardziej skomplikowanych funkcji, a jednocześnie jest jedną z najczęściej używanych. Przyjrzyjmy się ponownie kodowi programu "Witaj świecie!".
Linia 84 ⟶ 86:
[[C/printf|Więcej o funkcji printf()]]
 
==== Funkcja puts ====
 
Funkcja puts() przyjmuje jako swój argument ciąg znaków, który następnie bezmyślnie wypisuje na ekran kończąc go znakiem przejścia do nowej linii. W ten sposób, nasz pierwszy program moglibyśmy napisać w ten sposób:
Linia 102 ⟶ 104:
[[C/puts|Więcej o funkcji puts()]]
 
==== Funkcja fputs ====
 
Opisując funkcję fputs() wybiegamy już trochę w przyszłość (a konkretnie do opisu [[C/Czytanie_i_pisanie_do_plików|operacji na plikach]]), ale warto o niej wspomnieć już teraz, gdyż umożliwia ona wypisanie swojego argumentu bez wypisania na końcu znaku przejścia do nowej linii:
Linia 120 ⟶ 122:
[[C/fputs|Więcej o funkcji fputs()]]
 
==== Funkcja putchar ====
 
Funkcja putchar() służy do wypisywania pojedynczych znaków. Przykładowo jeżeli chcielibyśmy napisać program wypisujący w prostej tabelce wszystkie liczby od 0 do 99 moglibyśmy to zrobić tak:
Linia 150 ⟶ 152:
[[C/putchar|Więcej o funkcji putchar()]]
 
=== Funkcje wejścia ===
===Funkcja main===
 
 
[[C/Funkcje#Funkcja_main.28.29|Funkcja main]] może pobierać argumenty
 
==== Funkcja scanf() ====
Teraz pomyślmy o sytuacji odwrotnej. Tym razem to użytkownik musi powiedzieć coś programowi. W poniższym przykładzie program podaje kwadrat liczby, podanej przez użytkownika:
 
Linia 254 ⟶ 256:
[[C/scanf|Więcej o funkcji scanf()]]
 
==== Funkcja gets ====
 
Funkcja gets służy do wczytania pojedynczej linii. Może Ci się to wydać dziwne, ale: funkcji tej '''nie należy używać pod żadnym pozorem'''. Przyjmuje ona jeden argument - adres pierwszego elementu tablicy, do którego należy zapisać odczytaną linię - i nic poza tym. Z tego powodu nie ma żadnej możliwości przekazania do tej funkcji rozmiaru bufora podanego jako argument. Podobnie jak w przypadku scanf() może to doprowadzić do przepełnienia bufora, co może mieć tragiczne skutki. Zamiast tej funkcji należy używać funkcji fgets().
Linia 260 ⟶ 262:
[[C/gets|Więcej o funkcji gets()]]
 
==== Funkcja fgets ====
 
Funkcja fgets() jest bezpieczną wersją funkcji gets(), która dodatkowo może operować na dowolnych strumieniach wejściowych. Jej użycie jest następujące:
Linia 293 ⟶ 295:
[[C/fgets|Więcej o funkcji fgets()]]
 
==== Funkcja getchar() ====
 
Jest to bardzo prosta funkcja, wczytująca 1 znak z klawiatury. W wielu przypadkach dane mogą być buforowane przez co wysyłane są do programu dopiero, gdy bufor zostaje przepełniony lub na wejściu jest znak przejścia do nowej linii. Z tego powodu po wpisaniu danego znaku należy nacisnąć klawisz enter, aczkolwiek trzeba pamiętać, że w następnym wywołaniu zostanie zwrócony znak przejścia do nowej linii. Gdy nastąpił błąd lub nie ma już więcej danych funkcja zwraca wartość EOF (która ma jednak wartość logiczną 1 toteż zwykła pętla <code>while (getchar())</code> nie da oczekiwanego rezultatu):