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

Z Wikibooks, biblioteki wolnych podręczników.
< C
Usunięta treść Dodana treść
m →‎Funkcja wyjścia printf(): w programie "hello world" na wczesniejszych stronach nie ma przecinka.
Kj (dyskusja | edycje)
m popr. nawigacji
Linia 109: Linia 109:
[[en:C Programming/Simple_Input_and_Output]]
[[en:C Programming/Simple_Input_and_Output]]
<noinclude>
<noinclude>
{{ProstaNawigacja|spis=C|poprz=Zmienne w C|poprzart=C/Zmienne|nast=Podstawowe operacje matematyczne|nastart=C/Podstawowe operacje matematyczne}}
{{ProstaNawigacja|spis=C|poprz=Instrukcje sterujące|poprzart=C/Instrukcje sterujące|nast=Funkcje|nastart=C/Funkcje}}
</noinclude>
</noinclude>

Wersja z 11:49, 14 sty 2007

Wejście/wyjście

Komputer byłby całkowicie bezużyteczny, gdyby użytkownik nie mógł się z nim porozumieć (tj. wprowadzić danych lub otrzymać wyników pracy programu). Programy komputerowe służą w największym uproszczeniu do obróbki danych - więc muszą te dane jakoś od nas otrzymać, przetworzyć i przekazać nam wynik.

Takie wczytywanie i "wyrzucanie" danych w terminologii komputerowej nazywamy wejściem (input) i wyjściem (output). Bardzo często mówi się o wejściu i wyjściu danych łącznie - input/output, albo po prostu I/O.

W C do komunikacji z użytkownikiem służą odpowiednie funkcje. Zresztą, do wielu zadań w C służą funkcje. Używając funkcji, nie musimy wiedzieć, w jaki sposób komputer wykonuje jakieś zadanie, interesuje nas tylko to, co ta funkcja robi. Funkcje niejako "wykonują za nas część pracy", ponieważ nie musimy pisać być może dziesiątek linijek kodu, żeby np. wypisać tekst na ekranie (wbrew pozorom - kod funkcji wyświetlającej tekst na ekranie jest dość skomplikowany). Jeszcze taka uwaga - gdy piszemy o jakiejś funkcji, zazwyczaj podając jej nazwę dopisujemy na końcu nawias:

printf()
scanf()

żeby było jasne, że chodzi o funkcję, a nie o coś innego.

Wyżej wymienione funkcje to jedne z najczęściej używanych funkcji w C - pierwsza służy do wypisywania danych na ekran, natomiast druga do wczytywania danych z klawiatury.

Podstawowe funkcje wejścia/wyjścia z biblioteki stdio

W C jest wiele różnych funkcji umożliwiających komunikację programu z użytkownikiem. Jedna z najprostszych, a zarazem najbardziej wszechstronnych funkcji wyjścia została użyta w przykładzie "Hello World!"; na początku kodu w tym przykładzie użyliśmy standardowej biblioteki stdio.h. Poniżej omówienie funkcji wejścia/wyjścia zawartych w tej bibliotece.

Funkcja wyjścia printf()

Jest to najczęściej używana funkcja wyjścia. Przyjrzyjmy się ponownie kodowi programu "Hello, World!".

#include <stdio.h>

int main(void)
{
  printf("Hello world!\n");
  return 0;
}

Po skompilowaniu i uruchomieniu, program wypisze na ekranie:

Hello world!

Ten tekst na ekranie wyświetliła właśnie funkcja printf(). Funkcja wykonuje pewne zadanie, jednak używając funkcji nie musimy wiedzieć, jak ona działa, "co ma w środku" - nas interesuje tylko efekt jej działania, oraz jak tej funkcji używać (funkcje możemy również sami napisać, ale o tym w dalszej części podręcznika).

W naszym przykładowym programie, chcąc by funkcja printf() wypisała tekst na ekranie, umieściliśmy go w cudzysłowach wewnątrz nawiasów po funkcji printf(). Ogólnie, wywołanie funkcji printf() wygląda następująco:

printf(format, argument1, argument2, ...);

Przykładowo:

int i=500;
printf("Liczbami calkowitymi sa na przykład %i oraz %i.\n", 1, i);

wypisze

Liczbami calkowitymi sa na przykład 1 oraz 500.

Format to napis ujęty w cudzysłowy, który określa ogólny kształt, schemat tego, co ma być wyświetlone. Format jest drukowany tak, jak go napiszemy, jednak niektóre znaki specjalne zostaną w nim podmienione na co innego. Przykładowo, znak specjalny \n jest zamieniany na znak nowej linii. Natomiast procent jest podmieniany na jeden z argumentów. Po procencie następuje specyfikacja, jak wyświetlić dany argument. W tym przykładzie %i (od int) oznacza, że argument ma być wyświetlony jak liczba całkowita. W związku z tym, że \ i % mają specjalne znaczenie, aby wydrukować je, należy użyć ich podwójnie:

printf("Procent: %% Backslash: \\");

drukuje:

Procent: % Backslash \

(bez przejścia do nowej linii). Na liście argumentów możemy mieszać ze sobą zmienne różnych typów, liczby, napisy itp. w dowolnej ilości. Funkcja printf przyjmie ich tyle, ile tylko napiszemy. Należy uważać, by nie pomylić się w formatowaniu:

int i=5;
printf("%i %s %i", 5, 4, "napis"); /* powinno być: "%i %i %s" */

Przy włączeniu ostrzeżeń (opcja -Wall w GCC) kompilator powinien nas ostrzec, gdy format nie odpowiada podanym elementom.

Najczęstrze użycie printf():

  • printf("%i", i); gdy i jest typu int; zamiast %i można użyć %d
  • printf("%f", i); gdy i jest typu float lub double
  • printf("%c", i); gdy i jest typu char (i chcemy wydrukować znak)
  • printf("%s", i); gdy i jest napisem (typu char*)

Więcej o funkcji printf()

Funkcja wejścia 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:

#include <stdio.h>

int main ()
{
  int liczba = 0;
  printf ("Podaj liczbę: ");
  scanf ("%d", &liczba);
  printf ("%d*%d=%d\n", liczba, liczba, liczba*liczba); 
  return 0;
}

Zauważyłeś, że w tej funkcji przy zmiennej pojawił się nowy operator - &. Jest on ważny, gdyż bez niego funkcja scanf() nie skopiuje odczytanej wartości liczby do odpowiedniej zmiennej! Właściwie oznacza przekazanie do funkcji adresu zmiennej, by funkcja mogła zmienić jej wartość. Nie musisz teraz rozumieć, jak to się odbywa, wszystko zostanie wyjaśnione w rozdziale Wskaźniki.

Oznaczenia są takie same jak przy printf(), czyli scanf("%i", &liczba); wczytuje liczbę typu int a scanf("%f", &liczba); – liczbę typu float.

Więcej o funkcji scanf()

Funkcja puts()

Inną funkcją wyjścia jest funkcja puts(). W przeciwieństwie do printf() nie formatuje ona wyświetlanego tekstu, przez co jest szybsza. Jej użycie jest bardzo proste:

#include <stdio.h>

int main ()
{
  puts("Hello world!");
  return 0;
}

W przeciwieństwie do funkcji printf() funkcja puts() powoduje automatyczne przesunięcie kursora do następnego wiersza, dlatego też na końcu napisu nie musimy umieszczać znaku '\n'. Więcej o funkcji puts()

Funkcja wejścia getchar()

Jest to bardzo prosta funkcja, wczytująca 1 znak z klawiatury. W systemie Linux z biblioteką GNU Libc po wpisaniu danego znaku należy nacisnąć klawisz enter. W przypadku wpisania kilku znaków do zmiennej przypisany zostanie pierwszy znak, wpisany przez użytkownika.

#include <stdio.h>

int main(void)
{
  char c;
  c = getchar();
  printf("Wpisałeś znak: %c!\n", c);
  return 0;
}

Więcej o funkcji getchar()

Szablon:ProstaNawigacja