26
Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 2 Zmienne i obsługa wejścia/wyjścia

Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

  • Upload
    hadang

  • View
    228

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 1

Podstawy programowania.

Wykład 2

Zmienne i obsługa wejścia/wyjścia

Page 2: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 2

Programowanie

➔ Programowanie – typowe kroki zapis kodu źródłowego w pliku tekstowym kompilacja

• usuwanie błędów składniowych uruchomienie 

• testowanie➔ Wsparcie narzędzi, w tym systemu operacyjnego:

edytor tekstu kompilator

• środowiska tworzenia oprogramowania debugger profiler

➔ Konwencje stosowane w różnych środowiskach

Page 3: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 3

Pierwszy program w C

/* korzystanie z biblioteki – komentarze... */#include <stdio.h> // USES

// funkcja - "odpowiednik" algorytmu// funkcja "main" - punkt wejścia, obecny w każdym programie// konkretna funkcja main:// brak danych wejściowych, brak danych wyjściowych, // wszystko jest efektem ubocznymvoid main(void )// nawiasy klamrowe wyróżniają grupy instrukcji - tutaj treść funkcji "main"{ // wcięcie, konwencje zapisu // printf - interakcja z systemem operacyjnym // standardowe wejście, standardowe wyjście, napis, znak nowej linii printf("hello, world\n"); // średnik}

Page 4: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 4

Wejście/wyjście

➔ Obsługa konkretnego urządzenia wejścia/wyjścia jest realizowana przez system operacyjny

➔ Na poziomie języka (C i innych) pojawiają się abstrakcje umożliwiające korzystanie z wejścia/wyjścia bez znajomości szczegółów technicznych urządzeń

➔ Powszechną i użyteczną abstrakcją jest traktowanie interakcji z urządzeniem wejścia/wyjścia jako przesyłania strumieni znaków podstawowy zestaw znaków (ASCII) nie obejmuje polskich 

liter rozszerzone zestawy znaków (np. UTF) są obsługiwane przez 

nowsze kompilatory pojedynczy znak UTF może zajmować więcej miejsca niż 

pojedynczy znak ASCII (jeden bajt) 

Page 5: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 5

Wejście/wyjście

➔ Język C posługuje się pojęciami standardowego wejścia i standardowego wyjścia standardowym urządzeniem wejścia jest zazwyczaj klawiatura standardowym urządzeniem wyjścia jest zazwyczaj terminal

• w ramach graficznych interfejsów wykonywany program jest powiązany z konkretnym terminalem

• brak terminala może zaburzać działanie programu podstawowe funkcje obsługi strumieni wejścia i wyjścia 

pozwalają odczytać lub zapisać pojedynczy znak:• getchar() ­ uruchamia procedurę systemu operacyjnego 

pobierającą pojedynczy znak ze standardowego wejścia• putchar() ­ uruchamia procedurę systemu operacyjnego 

wypisującą pojedynczy znak na ekranie (w okienku) terminala

Page 6: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 6

Wejście/wyjście

➔ Oprócz pobierania i wypisywania pojedynczych znaków, standard C udostępnia szereg operacji na napisach (ciągach znaków) i liczbach printf(.....) ­ wypisuje ciąg znaków zgodnie z wzorcem 

formatowania przesyłanym jako jeden z argumentów (jedna z danych wejściowych)• nazwa printf pochodzi od określenia (print formatted output)

printf(".....") ­ wypisuje napis zawarty pomiędzy znakami cudzysłowu na ekranie terminala

scanf(....) ­ pobiera (odczytuje) ze standardowego wejścia dane zgodnie z wzorcem formatowania przesyłanym jako jeden z argumentów (jedna z danych wejściowych)

i wiele innych

Page 7: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 7

Wejście/wyjście

➔ Informacje o wykorzystywanych funkcjach bibliotecznych zawarte są w tzw. plikach nagłówkowych plikiem nagłówkowym zawierającym informacje o funkcjach 

wejścia/wyjścia jest plik stdio.h➔ Informacje o realizowanych funkcjach zawarte w plikach 

nagłówkowych dołączane są do kodu źródłowego (formalnie wklejane) za pomocą dyrektywy #include

➔ Dzięki informacjom z plików nagłówkowych kompilator wie czy funkcje zostały poprawnie wykorzystane w programie

➔ Skompilowany kod źródłowy nie zawiera jeszcze skompilowanego kodu funkcji bibliotecznych

➔ Skompilowany kod funkcji bibliotecznych dołączany jest do ostatecznego programu na etapie linkowania

Page 8: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 8

Proces programowania ­ konsolidacja

● kod źródłowy ­> [ kod pośredni ­> ] kod binarny● konsolidacja (linkowanie)

łączenie różnych plików zawierających wstępnie skompilowany kod• m.in. biblioteki, w tym systemowe

możliwe rodzaje konsolidacji• statyczna – tworzony plik wykonywalny zawiera wszystkie 

potrzebne funkcje➢ konsolidacja statyczna częściowo uniezależnia od detali 

systemu operacyjnego dając kod bardziej przenośny • dynamiczna – plik wykonywalny zawiera informację o 

wymaganych funkcjach, które są dołączane w trakcie działania programu

➢ konsolidacja dynamiczna produkuje kod o mniejszym rozmiarze

 

Page 9: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 9

Tworzenie i wykonanie kodu

Page 10: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 10

Programy = algorytmy + struktury danych

● Przebieg typowego programu: wczytanie danych wejściowych

• program rezerwuje miejsce na dane• wczytanie odbywa się przez wywołanie funkcji, których 

działanie zależy od sprzętu i systemu operacyjnego realizacja przetwarzania

• realizacja algorytmu wyrażonego w kodzie źródłowym instrukcjami operującymi na danych

• w kodzie binarnym i języku asemblera instrukcje zamienione są na zestawy rozkazów procesora 

zwrócenie wyniku, danych wyjściowych• poprzez wywołanie funkcji, których działanie zależy od 

sprzętu i systemu operacyjnego● Istotna rola przechowywania danych (w pamięci 

operacyjnej) w trakcie wykonania programu 

Page 11: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 11

Programowanie

➔ Jak zapisać dane w pamięci operacyjnej? typy danych (1, ­5, 123456789, 2.6, 1/3, 2,34*1012, 1.9*10­15)?

➔ Typ danych – ujęcie abstrakcyjne zestaw możliwych wartości, reprezentacja zestaw możliwych operacji do wykonania na obiektach danego typu

➔ Typy danych – ujęcie uproszczone wbudowane typy danych języka programowania, przykład C:

• znaki (char) – jednobajtowe liczby całkowite• liczby całkowite (int) – rozmiar zależny od systemu (16, 32, 64 bity)• liczby rzeczywiste (zmiennoprzecinkowe) 

➢ pojedynczej precyzji (float) – 32 bity, 4 bajty➢ podwójnej precyzji (double) – 64 bity, 8 bajtów

• wartości logiczne: true, false (od C99, wymaga stdbool.h)➢ zapisywane jako wartości całkowite (false==0, true==1) 

Page 12: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 12

Tablica kodów ASCII (7 bitów)

Page 13: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 13

Zapis binarny

➔ Pozycyjne systemy liczbowe: dziesiętny, dwójkowy, szesnastkowy

➔ Przekształcanie do postaci binarnej i z postaci binarnej➔ Zapis liczb naturalnych

kolejność bajtów (big­endian, little­endian)

➔ Zapis liczb całkowitych – ujemnych i dodatnich ze znakiem (problem podwójnego zera) – zakres (­2n­1+1, 2n­1­1) z zapisem od podstawy ­2n (zakres  (­2n­1, 2n­1­1) – problem 0 

(zapis stosowany dla wykładnika liczb zmiennoprzecinkowych) w systemie uzupełnień ­ zakres  (­2n­1, 2n­1­1), 0 jako wszystkie 

bity zerowe

Page 14: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 14

Zapis binarny

➔ Zapis liczb rzeczywistych zapis ułamków – rozszerzenie systemu pozycyjnego dwójkowego

• np. liczba 1.38 i jej zapis dwójkowy z czterema bitami po przecinku: 1.0110 (zapis z obcięciem 1.38 = 1.0110 + 0.005)

• problem skończonej dokładności (np. liczba 1.0110 i brak liczb pomiędzy 1.3125, 1.375, 1.4375)

• pojecie cyfr znaczących – przykład powyżej: jedna lub dwie zapis wielkich i małych liczb ­ notacja wykładnicza („naukowa”)

• liczba = znak * mantysa * podstawawykładnik

➢  ­2,34*1012, 1.9*10­15

• odpowiedniość przesuwania przecinka i zmiany wykładnika• dokładność zależna od liczby bitów mantysy (ok. 10 bitów na 

3 cyfry znaczące)

Page 15: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 15

Zapis binarny

➔ Zapis liczb rzeczywistych formaty zmiennoprzecinkowe IEEE 754 pojedyncza precyzja, SP 

• 32 bity (znak + 23 bity mantysy + 8 bitów wykładnika) podwójna precyzja, DP 

• 64 bity (znak + 52 bity mantysy + 11 bitów wykładnika) mantysa znormalizowana (brak zapisu bitu przed przecinkiem)

• zakres dla liczb dodatnich: ➢ SP: od 1.2x10­38 do 3.4x1038, DP: od 2.2x10­308 do 1.8x10308

• dokładność w cyfrach znaczących: SP – 6 do 9, DP – 15 do 17  operacje na liczbach zmiennoprzecinkowych IEEE 754

• dodatkowa dokładność w trakcie realizacji operacji• pułapki i wyjątki (nadmiary, niedomiary, błędy operacji)• wartości specjalne (+/­0, +/­nieskończoność, NaN)

Page 16: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 16

Programowanie

➔ Dane:  stałe (z nazwą lub bez)  zmienne (na razie tylko z nazwą)

➔ Nazwy zmiennych (i stałych) mogą zawierać litery, cyfry, znak podkreślenia _ nie mogą być słowami kluczowymi języka nie mogą zaczynać się od cyfry duże litery są różne od małych powinny ułatwiać zrozumienie programu:

• np. rok_urodzenia, SredniaOcena itp. konwencje:

• od znaków _ często zaczynają się nazwy zmiennych w bibliotekach• stałe często mają nazwy z samych dużych liter• inne: np. rozróżnienie argumentów i zmiennych lokalnych

Page 17: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 17

Nazwy zmiennych i słowa kluczowe C

➔ słowa kluczowe (keywords): auto break case char const  continue defaultdo double else enum   extern float for gotoif inline int long register restrict returnshort signed sizeof static struct switchtypedef union  unsigned void volatile while+ słowa zaczynające się od _ (np. _Bool)

➔ nazwy w aplikacjach powinny stosować własne konwencje nazwy mogą składać się z różnych składników, z których np. 

pierwszy określa program: • mpp_.... (mój pierwszy program itd. np., mpp_liczba_obiektów)

Page 18: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 18

Programowanie

➔ Kod źródłowy zawiera instrukcje➔ Instrukcje mogą być wyrażeniami złożonymi z:

stałych (1, 2.0, 'a', "napis", 037 (==31), 0x1f (==31)) nazw – zmiennych i stałych, ale także funkcji operatorów

➔ Operator związany jest z jednym lub dwoma, rzadko z trzema argumentami produkuje wynik

• dla argumentów określonego typu wynik posiada ściśle określony typ

• zasady użycia operatorów określają możliwe typy argumentów i wyniku

➢ definicje typów określają możliwość stosowania konkretnych operatorów  

Page 19: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 19

Operatory

➔ Podstawowe operatory: przypisanie (też jest operatorem i zwraca wynik...:

➢ typ – lewy argument➢ wartość – po przypisaniu

• a = 1; b = a+2; // wyrażenie po lewej stronie i obliczane wyrażenie jednoargumentowe operatory arytmetyczne: +, ­, ++, ­­

• ­3, ­a, c++, ­­k operatory arytmetyczne: +, ­, *, /, %

• a+b, c – h*k, 4*n, d/1.0, m%7; // zasady łączności operatory relacji: <, >, <=, >=, ==, !=  (wynik jako liczba całkowita)

• a<b, c >= d, f==10, wartosc_logiczna != false operatory logiczne: &&, || (wynik jako liczba całkowita)

• a<b && c>=d, d==7 || d <= 4 / /kolejność obliczania złożone operatory przypisania: +=, *=, (także dla innych operatorów)

• a += 2, d *= 4 // wyrażenie po lewej stronie i obliczane wyrażenie jednoargumentowe operatory logiczne: ! (negacja)

Page 20: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 20

Operatory

➔ Zasady języka określają  priorytety operatorów 

(siłę wiązania z argumentami) 

kierunek odczytywania argumentów

➔ Kolejność wykonywania operacji w wyrażeniu wynika z: priorytetów 

operatorów użycia nawiasów 

Page 21: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 21

Operatory

➔ Konwersje typów:  jawna konwersja ma postać: (nowy_typ) wartość:

• int a = (int) 3.5; float f = (float) d; // double d = 0.1; istnieje możliwość dokonywania przez kompilator niejawnej konwersji 

przy przypisaniu (a także dla innych operatorów) • int a = 3.5; float f = 0.1; // 0.1 ­ double, 0.1f ­ float

dla operatorów dwuargumentowych niejawna konwersja sprowadza oba do wspólnego typu, tak aby nie utracić precyzji

zapis kodu może oznaczać konieczność konwersji tracącej dokładność • kompilator może zgłosić ostrzeżenie• taka konwersja nie stanowi błędu składni

konwersja może oznaczać utratę dokładności (zaokrąglenia), czasem może także prowadzić do zupełnie błędnych wyników

niejawne konwersje mogą zmniejszać czytelność kodu, ukrywać intencje programisty

Page 22: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 22

Podstawowe typy zmiennych

#include <stdio.h> // USESint main(void) // zwrot kodu błędu lub sukcesu (0){ // definicje (deklaracje – informacje o nazwie i typie + rezerwacja int n; char c; // obszaru w pamięci) // inicjowanie n = 1/3; // instrukcja przypisania c = 'a'; // definicja z inicjowaniem float f = 1.0/3.0; double d = 1.0/3.0; // zapis // d = f; efekt? // możliwe notacje dla liczb zmiennoprzecinkowych printf("liczby i znaki: %c, %7d, %20.15f, %20.15lf\n", c, n, f, d); return(0); // obsługa błędów - temat rzeka}

Page 23: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 23

Operacje na zmiennych

➔ Problemy dla notacji z ograniczoną dokładnością (przykłady dla 4 cyfr znaczących) problemy z dokładnością: ile bitów potrzeba żeby dokładnie zapisać 

liczbę 0.1? problemy z arytmetyką  

• x * ( 1/x ) ≠ 1 – dla 135 spośród pierwszego tysiąca liczb naturalnych przy zapisie z pojedynczą precyzją

• a + b = a (dla b>0 ale znacznie mniejszego od a) ➢ co z 1/((a+b)­a) ?

• 0.005+0.005+10 ­ brak łączności i rozdzielności operacji• przydatność poprawy dokładności w trakcie dokonywania 

obliczeń• rozwiązanie niektórych problemów za pomocą zmiany 

algorytmu

Page 24: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 24

Problem skończonej precyzji 

➔ Przykładowe wskazówki postępowania z liczbami zmiennoprzecinkowymi, dla uniknięcia błędów wynikających ze zbyt małej precyzji:

sumować najpierw małe, potem duże liczby najpierw mnożyć, potem dzielić nie porównywać liczb tylko ich różnicę z małą wartością

double wartosc, wzorzec; // tak samo dla float// obliczanie wartościif( wartosc != wzorzec ) {....}#define TOLERANCJA 1e-9 // tolerancja może być inna dla double i floatif( fabs( wartosc – wzorzec ) <= TOLERANCJA ) {....}

Page 25: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 25

Formatowane wejście/wyjście

➔ Podstawy stosowania funkcji printf: pierwszy argument określa sposób formatowania kolejne argumenty podają dane do wydruku

• mogą to być zmienne lub stałe format to sposób konstruowania napisu

• zadany bezpośrednio – napis (łańcuch znaków)➢ znaki ASCII, znaki sterujące (\t, \n), znaki UTF (uwaga!)➢ jak w programie "hello"

• symbolicznie definiujący reprezentację zmiennych typów liczbowych

➢ %d, %f, %lf, %c, %s➢ %x.ylf – x rozmiar napisu, y – liczba miejsc po 

przecinku (np. %20.12lf)

Page 26: Podstawy programowania. Wykład 2 cia/wyjściabanas/PP/PP_W02_Zmienne_InOut.pdf · Krzysztof Banaś Podstawy programowania 4 Wejście/wyjście Obsługa konkretnego urządzenia wejścia/wyjścia

Krzysztof Banaś Podstawy programowania 26

Formatowane wejście/wyjście

➔ Podstawy użycia funkcji scanf argumenty podobne jak dla funkcji printf

• napis będący wzorcem formatowania • lista argumentów pasujących do symboli określających 

wstawienie zmiennej określonego typu➢ %d, %f, %lf, %c, %s i inne – podobnie jak dla printf

• argumentami na liście są zawsze adresy, miejsca wstawienia odczytywanych wartości zmiennych

scanf posiada precyzyjne zasady wczytywania wartości zmiennych zgodnie z wzorcem• znaki odstępu, tabulacji, nowej linii są pomijane

najprościej, najwygodniej i najbezpieczniej jest korzystać ze scanf wyłącznie do odczytania jednej wartości zmiennej zgodnie z najprostszym wzorcem:• scanf("%d", &i); scanf("%lf", &a);