Wczytywanie i wypisywanie danych w C++ za pomocą Scanf i Printf – szybsza alternatywa dla cout oraz cin

Wczytywanie i wypisywanie danych na ekranie komputera to podstawowa umiejętność przy pisaniu programów komputerowych. Na ten temat miałem już okazję pisać w artykułach: „Piszemy pierwszy program w C++” oraz „Obsługa zmiennych w C++„. Po przeczytaniu tych dwóch publikacji dowiedzieliście się, między innymi, że w C++ dane na ekranie komputera wypisujemy za pośrednictwem instrukcji cout:

A informacje do programu wczytujemy za pośrednictwem instrukcji cin:

Instrukcje te oczywiście sprawdzają się bardzo dobrze, ale czasami mogą nie wystarczyć lub po prostu specyfikacja naszej aplikacji wymaga maksymalnej optymalizacji. Należy tutaj zwrócić uwagę, że printf oraz scanf działają znacznie szybciej niż ich podane wyżej odpowiedniki oraz dostarczają więcej możliwości programiście.

Początkowo używanie tych dwóch funkcji może wydawać się nieco trudne ale jak już się dokładnie zapoznamy z ich specyfikacją, to nie powinno być żadnego problemu, a ich zastosowanie czasami może bardzo pomóc.

Kiedyś mądrzy ludzie napisali (czy powiedzieli? – nie ważne), że programowania można nauczyć się tylko programując w takim razie przejdźmy od razu do przykładu.

printf

Powyżej zademonstrowałem najprostszy przykład użycia funkcji printf do wypisania danych – w naszym przypadku był to tekst „Hello World!„. Oczywiście instrukcja ta ma znacznie więcej możliwości. Głównie chodzi o to, że w dowolnym miejscu danego tekstu, możemy wstawić na przykład zawartość jakiejś zmiennej:

Do oznaczeń typu %d przejdę później, a teraz zobaczmy inny przykład użycia instrukcji printf:

Oraz

Jak widać wypisywanie danych za pomocą instrukcji printf daje bardzo dużo możliwości w porównaniu do tradycyjnego cout. Oczywiście poza liczbami i tekstem, możemy również wstawiać dane innych typów:

Specyfikator Opis
%d lub %i Liczba całkowita ze znakiem (system dziesiętny) np. int
%f Liczba rzeczywista (system dziesiętny) np. float
%u Liczba całkowita bez znaku (system dziesiętny)
%e Liczba w notacji naukowej – ze znakiem e (małe litery)
%E Liczba w notacji naukowej – ze znakiem E (duże litery)
%g Liczba rzeczywista w notacji %f lub %e
%G Liczba rzeczywista w notacji %f lub %E
%o Liczba w systemie ósemkowym
%x Liczba w systemie szesnastkowym (małe litery)
%X Liczba w systemie szesnastkowym (duże litery)
%c Znak np. zmienne typu char
%s Łańcuch znaków zakończony „\0„, np. zmienne typu string
%p Adres pamięci

Wypisywanie znaku specjalnego %:

scanf

Instrukcja scanf działa praktycznie tak samo jak printf z tą różnicą, że nie wypisuje ona żadnych danych, a po prostu wczytuje. Zobaczmy na przykład:

Przykład wczytywania zmiennych typu long long:

Przykład wczytywania danych „znak po znaku”:

Więcej na temat wczytywania danych za pomocą funkcji scanf() „znak po znaku” możecie przeczytać w artykule: „Wczytywanie “znak po znaku” cyfr oraz wyrazów w C++„.

Tabela specyfikatorów dla scanf wygląda tak:

Specyfikator Opis
%d lub %i Liczba całkowita ze znakiem (system dziesiętny) np. int
%f Liczba rzeczywista (system dziesiętny) np. float
%u Liczba całkowita bez znaku (system dziesiętny)
%e Liczba w notacji naukowej – ze znakiem e (małe litery)
%E Liczba w notacji naukowej – ze znakiem E (duże litery)
%g Liczba rzeczywista w notacji %f lub %e
%G Liczba rzeczywista w notacji %f lub %E
%o Liczba w systemie ósemkowym
%x Liczba w systemie szesnastkowym (małe litery)
%X Liczba w systemie szesnastkowym (duże litery)
%c Znak np. zmienne typu char

Przy wczytywaniu łańcuchów znaków (string) lepiej zastosować inną technikę np. getline().

Fot. (ilustracja wpisu): Dominic Alves, CC BY 2.0.

, , , , , , ,