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

Usunięta treść Dodana treść
Linia 173:
Oznaczenia są podobne takie jak przy printf(), czyli <tt>scanf("%i", &liczba);</tt> wczytuje liczbę typu <tt>int</tt>, <tt>scanf("%f", &liczba);</tt> &ndash; liczbę typu <tt>float</tt>, a <tt>scanf("%s", tablica_znaków);</tt> ciąg znaków. Ale czemu w tym ostatnim przypadku nie ma etki? Otóż, gdy podajemy jako argument do funkcji wyrażenie typu tablicowego zamieniane jest ono automatycznie na adres pierwszego elementu tablicy. Będzie to dokładniej opisane w rozdziale poświęconym [[C/Wskaźniki|wskaźnikom]].
 
{{Uwaga|Brak etki jest częstym błędem szczególnie wśród początkujących programistów. Ponieważ [[C/scanf|funkcja scanf()]] [[C/Funkcje#Zmienna_liczba_argumentów|akceptuje zmienną liczbę argumentów]] to nawet kompilator może mieć kłopoty z wychwyceniem takich błędów (konkretnie chodzi o to, że standard nie wymaga od kompilatora wykrywania takich pomyłek), choć kompilator GCC radzi sobie z tym jeżeli podamy mu argument <tt>-Wformat</tt>.}}
 
Należy jednak uważać na to ostatnie użycie. Rozważmy na przykład poniższy kod: