Wojciech Poªowczuk Waªbrzych, 2 listopada 2021
I scanf(const char * format,. . . )
I format ªa«cuch znaków, przy czym znak % rozpoczyna sekwencj¦ formatuj¡c¡, która mo»e wyst¦powa¢ wielokrotnie
I . . . dodatkowe argumenty, których liczba powinna odpowiada¢ liczbie sekwencji formatuj¡cych w ªa«cuchu format,
I funkcja printf wypisuje ªa«cuch format zast¦puj¡c sekwencje formatuj¡ce odpowiednio zinterpretowanymi warto±ciami dodatkowych argumentów
I funkcja scanf czyta ze standardowego wej±cia warto±ci zgodnie z sekwencjami formatuj¡cymi i zapisuje je pod adresy podane jako dodatkowe argumenty
Przykªad
#include<s t d i o . h>
i n t main (i n t argc , char * argv [ ] ) { p r i n t f ("%s ma %d koty . \ n","Ala", 2 3 ) ; return 0 ;
}
ags opis
- tekst wyrównany do lewej (domy±lnie do prawej) + liczba zawsze ze znakiem z przodu (równie» +) spacja je±li liczba nie ma znaku, to wstawiana jest spacja
(pomocne przy wyrównaniu)
# u»yty z 'o', 'x' lub 'X' powoduje wypisanie tu» przed liczb¡ '0', '0x', '0X' dla warto±ci ró»nych od zera
# u»yty z 'a', 'A', 'e', 'E', 'f', 'F', 'g' lub 'G' wymusza wypisanie kropki dziesi¦tnej nawet, je±li nie ma po niej nic 0 uzupeªnienie z lewej strony zerami (0) zamiast spacji,
je±li padding jest wª¡czony
printf sekwencje formatuj¡ce
%[ags][width][.precision][length]specier width opis
liczba minimalna liczba znaków do wypisania, je±li jest ich mniej, to uzupeªniana jest z przodu spacjami
∗ width jest podana jako dodatkowy argument b¦d¡cy liczb¡
caªkowit¡, podany przed formatowanym argumentem
.precision opis
.number dla liczb caªkowitych oznacza liczb¦ cyfr do wypisania, je±li jest ich mniej, to uzupeªniane zerami z przodu .number dla liczb zmiennoprzecinkowych oznacza precyzj¦, czyli
liczb¦ cyfr wypisywanych po przecinku
.number dla ªa«cuchów znaków oznacza maksymaln¡ liczb¦
znaków do wypisania
.∗ precision jest podana jako dodatkowy argument b¦d¡cy liczb¡ caªkowit¡, podan¡ przed formatowanym
argumentem
printf sekwencje formatuj¡ce
%[ags][width][.precision][length]specier
specier opis przykªad
d lub i liczba caªkowita ze znakiem, dziesi¦tnie 392 u liczba caªkowita bez znaku, dziesi¦tnie 7235
o ósemkowo bez znaku 610
x szesnastkowo bez znaku 7fa
X szesnastkowo, bez znaku (wielkimi) 7FA f lub F zmiennoprzecinkowo, dziesi¦tnie 392.65
e notacja naukowa (maªymi) 3.9265e+2
E notacja naukowa (wielkimi) 3.9265E+2
g u»yj najkrótszej reprezentacji: %e lub %f 392.65 G u»yj najkrótszej reprezentacji: %E lub %F 392.65
specier opis przykªad a szesnastkowo zmiennoprzecinkowe
(maªymi) -0xc.90fep-2
A szesnastkowo zmiennoprzecinkowe
(wielkimi) -0XC.90FEP-2
c znak a
s ªa«cuch znaków napis
p adres (wska¹nik) b8000000
n Nic nie wypisuj, ale zapami¦taj liczb¦
wypisanych znaków w kolejnym argumencie (musi to by¢ adres do int)
% % po % wypisze % na ekran %
Przykªad
#i n c l u d e <s t d i o . h>
i n t main ( ) {
p r i n t f (" Znaki : %c %c \n", ' a ', 6 5 ) ;
p r i n t f (" D z i e s i e t n i e : %d %ld \n", 1977 , 650000L ) ; p r i n t f (" Uzupelnione spacjami : %10d\n", 1 9 7 7 ) ; p r i n t f (" Uzupelnione zerami : %010d\n", 1 9 7 7 ) ;
p r i n t f ("Systemy liczbowe : %d %x %o %#x %#o\n", 100 , 100 , 100 , 100 , 1 0 0 ) ; p r i n t f (" Zmiennoprzecinkowe : %4.2 f %+.0e %E\n", 3 . 1 4 1 6 , 3 . 1 4 1 6 , 3 . 1 4 1 6 ) ; p r i n t f (" Dlugosc jako zmienna : %*d\n", 5 , 1 0 ) ;
p r i n t f ("%s \n", " Przykladowy napis . ") ; return 0 ;
}
I https://www.cplusplus.com/reference/cstdio/scanf/
Wska¹niki
I Ka»da zmienna jest w pami¦ci pod jakim± adresem
I Adres zmiennej pobieramy operatorem &
I Warto±¢ spod adresu pobieramy operatorem ∗
I Zmienne zajmuj¡ ró»n¡ ilo±¢ pami¦ci w zale»no±ci od ich typu, zatem wska¹niki te» maj¡ ró»ne typy
I Deklaracja wska¹nika poprzez: <TYP> ∗NazwaZmiennej;
I Operacje arytmetyczne na wska¹nikach i liczbach int s¡
poprawne i przesuwaj¡ adres
i n t main ( ) { i n t x=7;
i n t y=x ;
i n t *wskx , * wsky ; wskx=&x ;
(* wskx)++;
p r i n t f ("%d\n", x ) ; wsky=wskx ;
(* wsky)++;
p r i n t f ("x=%d , y=%d\n", x , y ) ; return 0 ;
}
Tablice i wska¹niki
I Tablica jest zawsze wska¹nikiem na pierwszy element tablicy
I Tablica zajmuje zawsze ci¡gªy kawaªek pami¦ci
I tab[i]==*(tab+i)
I O ile bajtów przesunie nam adres operacja tab+3?
#d e f i n e MAX 10 i n t main ( ) {
i n t tab [MAX] ;
f o r(i n t i =0; i<MAX; i ++){
tab [ i ]=( i +1)*( i +1);
}
f o r(i n t i =0; i<MAX; i ++){
p r i n t f ("%d , ",* ( tab+i ) ) ; }
return 0 ; }