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

Usunięta treść Dodana treść
Derbeth (dyskusja | edycje)
m - niepotrzebny link wsteczny, drobne
Derbeth (dyskusja | edycje)
rozwinięcie, głównie printf(), zmiana kolejności - scanf do góry
Linia 34:
Ten tekst na ekranie wyświetliła właśnie funkcja <tt>printf()</tt>. 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, żebychcąc by funkcja <tt>printf()</tt> wypisała tekst na ekranie, umieściliśmy w nawiasie przy funkcji, nasz tekstgo w cudzysłowiu.cudzysłowach Tekstwewnątrz pomiędzy cudzysłowami jest to ''ciąg znakowy'', lubnawiasów po prostu ''ciąg''funkcji printf(także używa się terminu ''łańcuch''). -Ogólnie, po angielsku '''string'''; natomiast to co umieszczamy w nawiasiewywołanie funkcji, jest<tt>printf()</tt> to jej ''argument''. "\n" powoduje przejście do nowej linii.wygląda Zatemnastępująco:
printf(format, argument1, argument2, ...);
* żeby wypisać tekst na ekranie za pomocą funkcji <tt>printf()</tt>, należy podać jako argument ciąg znakowy.
Przykładowo:
int main ()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 <tt>\n</tt> 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 <tt>%i</tt> (od '''i'''nt) oznacza, że argument ma być wyświetlony jak liczba całkowita. W związku z tym, że <tt>\</tt> i <tt>%</tt> 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 <tt>-Wall</tt> w [[C/Używanie kompilatora#GCC|GCC]]) kompilator powinien nas ostrzec, gdy format nie odpowiada podanym elementom.
 
Najczęstrze użycie <tt>printf()</tt>:
* <tt>printf("%i", i);</tt> gdy <tt>i</tt> jest typu <tt>int</tt>; zamiast <tt>%i</tt> można użyć <tt>%d</tt>
* <tt>printf("%f", i);</tt> gdy <tt>i</tt> jest typu <tt>float</tt> lub <tt>double</tt>
* <tt>printf("%c", i);</tt> gdy <tt>i</tt> jest typu <tt>char</tt> (i chcemy wydrukować znak)
* <tt>printf("%s", i);</tt> gdy <tt>i</tt> jest napisem (typu <tt>char*</tt>)
 
[[C/printf|Więcej o funkcji printf()]]
 
=== Funkcja puts() ===
Inną funkcją wyjścia jest funkcja <tt>puts()</tt>. W przeciwieństwie do <tt>printf()</tt> 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 <tt>printf()</tt> funkcja <tt>puts()</tt> powoduje automatyczne przesunięcie kursora do następnego wiersza, dlatego też na końcu napisu nie musimy umieszczać znaku '\n'.
[[C/puts|Więcej o funkcji puts()]]
 
=== Funkcja wejścia scanf() ===
Linia 68 ⟶ 73:
 
Zauważyłeś, że w tej funkcji przy zmiennej pojawił się nowy operator - '''&'''. Jest on ważny, gdyż bez niego funkcja <tt>scanf()</tt> 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 [[C/Wskaźniki|Wskaźniki]].
 
Oznaczenia są takie same jak przy <tt>printf()</tt>, czyli <tt>scanf("%i", &liczba);</tt> wczytuje liczbę typu <tt>int</tt> a <tt>scanf("%f", &liczba);</tt> &ndash; liczbę typu <tt>float</tt>.
 
[[C/scanf|Więcej o funkcji scanf()]]
 
=== Funkcja puts() ===
Inną funkcją wyjścia jest funkcja <tt>puts()</tt>. W przeciwieństwie do <tt>printf()</tt> 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 <tt>printf()</tt> funkcja <tt>puts()</tt> powoduje automatyczne przesunięcie kursora do następnego wiersza, dlatego też na końcu napisu nie musimy umieszczać znaku '\n'.
[[C/puts|Więcej o funkcji puts()]]
 
=== Funkcja wejścia getchar() ===