{"id":1231,"date":"2026-04-15T12:26:38","date_gmt":"2026-04-15T10:26:38","guid":{"rendered":"https:\/\/trzykody.pl\/?p=1231"},"modified":"2026-04-15T12:26:39","modified_gmt":"2026-04-15T10:26:39","slug":"c-scanf","status":"publish","type":"post","link":"https:\/\/trzykody.pl\/index.php\/2026\/04\/15\/c-scanf\/","title":{"rendered":"C Scanf"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Wej\u015bcie danych z klawiatury w j\u0119zyku C jest jednym z pierwszych miejsc, gdzie pojawiaj\u0105 si\u0119 realne problemy: b\u0142\u0119dne formaty, przepe\u0142nienia bufora, nieczytelne zachowanie przy b\u0142\u0119dnych danych. Mechanizm ten opiera si\u0119 na funkcjach biblioteki standardowej, kt\u00f3re interpretuj\u0105 tekst wprowadzony przez u\u017cytkownika i zamieniaj\u0105 go na warto\u015bci liczbowe lub napisy w pami\u0119ci programu, a jedn\u0105 z najcz\u0119\u015bciej u\u017cywanych funkcji jest <strong>C Scanf<\/strong>.<\/p>\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>Spis Tre\u015bci<\/h2><nav><ol><li><a href=\"#jak-dziala-c-scanf-w-praktyce-i-dlaczego-interpretacja-danych-wejsciowych-bywa-problematyczna\">Jak dzia\u0142a C Scanf w praktyce i dlaczego interpretacja danych wej\u015bciowych bywa problematyczna<\/a><\/li><li><a href=\"#jakie-znaczenie-maja-specyfikatory-formatu-w-c-scanf-i-jak-wplywaja-na-interpretacje-danych\">Jakie znaczenie maj\u0105 specyfikatory formatu w C Scanf i jak wp\u0142ywaj\u0105 na interpretacj\u0119 danych<\/a><\/li><li><a href=\"#dlaczego-c-scanf-bywa-zrodlem-bledow-i-jak-wyglada-kontrola-poprawnosci-danych-wejsciowych\">Dlaczego C Scanf bywa \u017ar\u00f3d\u0142em b\u0142\u0119d\u00f3w i jak wygl\u0105da kontrola poprawno\u015bci danych wej\u015bciowych<\/a><\/li><li><a href=\"#jak-uzywac-c-scanf-w-kontekscie-roznych-typow-danych-i-struktur-wejsciowych\">Jak u\u017cywa\u0107 C Scanf w kontek\u015bcie r\u00f3\u017cnych typ\u00f3w danych i struktur wej\u015bciowych<\/a><\/li><li><a href=\"#jakie-sa-alternatywy-dla-c-scanf-i-kiedy-ich-uzycie-ma-sens-w-praktycznych-projektach\">Jakie s\u0105 alternatywy dla C Scanf i kiedy ich u\u017cycie ma sens w praktycznych projektach<\/a><\/li><li><a href=\"#uwagi-praktyczne-wynikajace-z-realnych-problemow-przy-pracy-z-wejsciem-uzytkownika\">Uwagi praktyczne wynikaj\u0105ce z realnych problem\u00f3w przy pracy z wej\u015bciem u\u017cytkownika<\/a><\/li><li><a href=\"#faq\">FAQ<\/a><\/li><li><a href=\"#zakonczenie\">Zako\u0144czenie<\/a><\/li><\/ol><\/nav><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jak-dziala-c-scanf-w-praktyce-i-dlaczego-interpretacja-danych-wejsciowych-bywa-problematyczna\">Jak dzia\u0142a C Scanf w praktyce i dlaczego interpretacja danych wej\u015bciowych bywa problematyczna<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Funkcja <code>scanf<\/code> pobiera dane ze standardowego wej\u015bcia (stdin) i interpretuje je zgodnie ze specyfikatorem formatu. Kluczowe jest to, \u017ce nie \u201eczyta warto\u015bci\u201d, tylko czyta tekst i pr\u00f3buje dopasowa\u0107 go do wzorca.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mechanizm dzia\u0142ania:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>funkcja analizuje ci\u0105g wej\u015bciowy znak po znaku<\/li>\n\n\n\n<li>ignoruje bia\u0142e znaki (spacje, tabulatory, nowe linie), je\u015bli format tego nie blokuje<\/li>\n\n\n\n<li>pr\u00f3buje dopasowa\u0107 dane do specyfikatora (<code>%d<\/code>, <code>%f<\/code>, <code>%s<\/code>, itd.)<\/li>\n\n\n\n<li>zapisuje wynik pod wskazany adres pami\u0119ci<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Istotna konsekwencja: je\u015bli dane wej\u015bciowe nie pasuj\u0105 do formatu, funkcja przestaje czyta\u0107 i zwraca liczb\u0119 poprawnie przypisanych element\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tabela przyk\u0142ad\u00f3w podstawowego u\u017cycia:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>int x; scanf(\"%d\", &amp;x);<\/code><\/td><\/tr><tr><td>C++<\/td><td><code>int x; scanf(\"%d\", &amp;x);<\/code><\/td><\/tr><tr><td>Python (odpowiednik)<\/td><td><code>x = int(input())<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00f3\u017cnica mi\u0119dzy C a Pythonem jest fundamentalna: Python zg\u0142asza wyj\u0105tek przy b\u0142\u0119dzie, <code>scanf<\/code> ko\u0144czy dzia\u0142anie i zwraca warto\u015b\u0107 liczbow\u0105 (np. 0 lub 1).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jakie-znaczenie-maja-specyfikatory-formatu-w-c-scanf-i-jak-wplywaja-na-interpretacje-danych\">Jakie znaczenie maj\u0105 specyfikatory formatu w C Scanf i jak wp\u0142ywaj\u0105 na interpretacj\u0119 danych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Specyfikatory formatu okre\u015blaj\u0105 typ danych oraz spos\u00f3b ich parsowania. B\u0142\u0105d w specyfikatorze oznacza b\u0142\u0119dne dane w pami\u0119ci, cz\u0119sto bez ostrze\u017cenia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Najwa\u017cniejsze specyfikatory:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Typ danych<\/th><th>Specyfikator<\/th><th>Opis<\/th><\/tr><\/thead><tbody><tr><td>int<\/td><td><code>%d<\/code><\/td><td>liczba ca\u0142kowita dziesi\u0119tna<\/td><\/tr><tr><td>float<\/td><td><code>%f<\/code><\/td><td>liczba zmiennoprzecinkowa<\/td><\/tr><tr><td>double<\/td><td><code>%lf<\/code><\/td><td>liczba double<\/td><\/tr><tr><td>char<\/td><td><code>%c<\/code><\/td><td>pojedynczy znak<\/td><\/tr><tr><td>string<\/td><td><code>%s<\/code><\/td><td>ci\u0105g znak\u00f3w (do spacji)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad wielokrotnego odczytu:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>int a; float b; scanf(\"%d %f\", &amp;a, &amp;b);<\/code><\/td><\/tr><tr><td>C++<\/td><td><code>int a; float b; scanf(\"%d %f\", &amp;a, &amp;b);<\/code><\/td><\/tr><tr><td>Python<\/td><td><code>a, b = map(float, input().split())<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Istotny szczeg\u00f3\u0142: <code>%s<\/code> nie zabezpiecza przed przepe\u0142nieniem bufora. Je\u015bli u\u017cytkownik wpisze wi\u0119cej znak\u00f3w ni\u017c przewidziano, pami\u0119\u0107 zostaje nadpisana.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bezpieczniejsza wersja:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>char buf[10]; scanf(\"%9s\", buf);<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Liczba <code>9<\/code> oznacza maksymaln\u0105 liczb\u0119 znak\u00f3w + 1 na znak <code>\\0<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"dlaczego-c-scanf-bywa-zrodlem-bledow-i-jak-wyglada-kontrola-poprawnosci-danych-wejsciowych\">Dlaczego C Scanf bywa \u017ar\u00f3d\u0142em b\u0142\u0119d\u00f3w i jak wygl\u0105da kontrola poprawno\u015bci danych wej\u015bciowych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najcz\u0119stszy b\u0142\u0105d: ignorowanie warto\u015bci zwracanej przez <code>scanf<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zasada:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>funkcja zwraca liczb\u0119 poprawnie przypisanych zmiennych<\/li>\n\n\n\n<li>je\u015bli wynik jest mniejszy ni\u017c oczekiwany \u2192 dane wej\u015bciowe by\u0142y b\u0142\u0119dne<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad kontroli:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>int x; if (scanf(\"%d\", &amp;x) != 1) { printf(\"Blad\\n\"); }<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad problematyczny:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>u\u017cytkownik wpisuje <code>abc<\/code><\/li>\n\n\n\n<li><code>%d<\/code> nie pasuje<\/li>\n\n\n\n<li><code>scanf<\/code> zwraca 0<\/li>\n\n\n\n<li>zmienna <code>x<\/code> pozostaje niezainicjalizowana<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Drugi typ problemu: pozostawienie znak\u00f3w w buforze wej\u015bcia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>int x; char c; scanf(\"%d\", &amp;x); scanf(\"%c\", &amp;c);<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Problem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>po wpisaniu <code>10<\/code> i Enter, w buforze zostaje <code>\\n<\/code><\/li>\n\n\n\n<li><code>%c<\/code> odczytuje ten znak, nie czeka na u\u017cytkownika<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Rozwi\u0105zanie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>scanf(\" %c\", &amp;c);<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Spacja przed <code>%c<\/code> powoduje pomini\u0119cie bia\u0142ych znak\u00f3w.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jak-uzywac-c-scanf-w-kontekscie-roznych-typow-danych-i-struktur-wejsciowych\">Jak u\u017cywa\u0107 C Scanf w kontek\u015bcie r\u00f3\u017cnych typ\u00f3w danych i struktur wej\u015bciowych<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Z\u0142o\u017cone wej\u015bcie wymaga dok\u0142adnego dopasowania formatu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad: wczytanie daty:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>int d,m,y; scanf(\"%d-%d-%d\", &amp;d, &amp;m, &amp;y);<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dane wej\u015bciowe:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">15-04-2026<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dla tablic:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>int a[3]; scanf(\"%d %d %d\", &amp;a[0], &amp;a[1], &amp;a[2]);<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dla p\u0119tli:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>for(int i=0;i&lt;3;i++) scanf(\"%d\", &amp;a[i]);<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Wczytywanie string\u00f3w ze spacjami wymaga u\u017cycia alternatyw:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>char buf[100]; fgets(buf, 100, stdin);<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><code>scanf(\"%s\")<\/code> zatrzymuje si\u0119 na pierwszej spacji, <code>fgets<\/code> czyta ca\u0142\u0105 lini\u0119.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"jakie-sa-alternatywy-dla-c-scanf-i-kiedy-ich-uzycie-ma-sens-w-praktycznych-projektach\">Jakie s\u0105 alternatywy dla C Scanf i kiedy ich u\u017cycie ma sens w praktycznych projektach<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce produkcyjnej <code>scanf<\/code> jest cz\u0119sto zast\u0119powany:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>fgets<\/code> + <code>sscanf<\/code><\/li>\n\n\n\n<li>r\u0119czne parsowanie<\/li>\n\n\n\n<li>biblioteki wy\u017cszego poziomu<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Przyk\u0142ad:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C<\/td><td><code>char buf[100]; fgets(buf,100,stdin); sscanf(buf,\"%d\",&amp;x);<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Zalety:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>kontrola nad wej\u015bciem<\/li>\n\n\n\n<li>mo\u017cliwo\u015b\u0107 walidacji<\/li>\n\n\n\n<li>brak problem\u00f3w z buforem stdin<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">W C++:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>C++<\/td><td><code>int x; std::cin &gt;&gt; x;<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">W Pythonie:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>J\u0119zyk<\/th><th>Kod<\/th><\/tr><\/thead><tbody><tr><td>Python<\/td><td><code>x = int(input())<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"uwagi-praktyczne-wynikajace-z-realnych-problemow-przy-pracy-z-wejsciem-uzytkownika\">Uwagi praktyczne wynikaj\u0105ce z realnych problem\u00f3w przy pracy z wej\u015bciem u\u017cytkownika<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>brak limitu w <code>%s<\/code> = ryzyko przepe\u0142nienia bufora<\/li>\n\n\n\n<li>ignorowanie warto\u015bci zwracanej = brak kontroli b\u0142\u0119d\u00f3w<\/li>\n\n\n\n<li>mieszanie <code>scanf<\/code> i <code>fgets<\/code> = trudne do debugowania b\u0142\u0119dy<\/li>\n\n\n\n<li><code>%c<\/code> bez spacji = odczyt znak\u00f3w ko\u0144ca linii zamiast danych<\/li>\n\n\n\n<li>dane niezgodne z formatem zatrzymuj\u0105 parsowanie bez komunikatu<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Cz\u0119sty scenariusz: program \u201edzia\u0142a u mnie\u201d, ale u u\u017cytkownika zawiesza si\u0119 przy wpisaniu litery zamiast liczby.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq\">FAQ<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Dlaczego scanf nie dzia\u0142a przy wpisaniu tekstu zamiast liczby?<\/strong><br>Bo <code>%d<\/code> oczekuje liczby. Przy tek\u015bcie funkcja zwraca 0 i nie przypisuje warto\u015bci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Czy scanf jest bezpieczny?<\/strong><br>Nie w podstawowej formie. Wymaga limit\u00f3w (<code>%Ns<\/code>) i kontroli zwracanej warto\u015bci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Dlaczego scanf pomija wej\u015bcie przy %c?<\/strong><br>Bo w buforze zostaje znak nowej linii. Spacja przed <code>%c<\/code> rozwi\u0105zuje problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Czy scanf mo\u017cna stosowa\u0107 w projektach produkcyjnych?<\/strong><br>Rzadko. Zwykle zast\u0119puje si\u0119 go <code>fgets<\/code> + parsowanie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Czym r\u00f3\u017cni si\u0119 %f od %lf?<\/strong><br><code>%f<\/code> dla <code>float<\/code>, <code>%lf<\/code> dla <code>double<\/code>. W <code>scanf<\/code> to rozr\u00f3\u017cnienie ma znaczenie.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Jak wczyta\u0107 tekst ze spacjami?<\/strong><br>Nie u\u017cywa\u0107 <code>%s<\/code>, tylko <code>fgets<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"zakonczenie\">Zako\u0144czenie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>scanf<\/code> daje du\u017c\u0105 kontrol\u0119 nad wej\u015bciem, ale wymaga precyzji i \u015bwiadomo\u015bci dzia\u0142ania. Bez tego bardzo \u0142atwo wprowadzi\u0107 b\u0142\u0119dy trudne do wykrycia, szczeg\u00f3lnie przy danych od u\u017cytkownika.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>\u0179r\u00f3d\u0142o Foto: Freepik<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wej\u015bcie danych z klawiatury w j\u0119zyku C jest jednym z pierwszych miejsc, gdzie pojawiaj\u0105 si\u0119 realne problemy: b\u0142\u0119dne formaty, przepe\u0142nienia bufora, nieczytelne zachowanie przy b\u0142\u0119dnych danych. Mechanizm ten opiera si\u0119 na funkcjach biblioteki standardowej, kt\u00f3re interpretuj\u0105 tekst wprowadzony przez u\u017cytkownika i zamieniaj\u0105 go na warto\u015bci liczbowe lub napisy w pami\u0119ci programu, a jedn\u0105 z najcz\u0119\u015bciej u\u017cywanych funkcji jest C Scanf. Jak dzia\u0142a C Scanf w praktyce i dlaczego interpretacja danych wej\u015bciowych bywa problematyczna Funkcja scanf pobiera dane ze standardowego wej\u015bcia (stdin) i interpretuje je zgodnie ze specyfikatorem formatu. Kluczowe jest to, \u017ce nie \u201eczyta warto\u015bci\u201d, tylko czyta tekst i pr\u00f3buje dopasowa\u0107 go do wzorca. Mechanizm dzia\u0142ania: Istotna konsekwencja: je\u015bli dane wej\u015bciowe nie pasuj\u0105 do formatu, funkcja przestaje czyta\u0107 i zwraca liczb\u0119 poprawnie przypisanych element\u00f3w. Tabela przyk\u0142ad\u00f3w podstawowego u\u017cycia: J\u0119zyk Kod C int x; scanf(&#8222;%d&#8221;, &amp;x); C++ int x; scanf(&#8222;%d&#8221;, &amp;x); Python (odpowiednik) x = int(input()) R\u00f3\u017cnica mi\u0119dzy C a Pythonem jest fundamentalna: Python zg\u0142asza wyj\u0105tek przy b\u0142\u0119dzie, scanf ko\u0144czy dzia\u0142anie i zwraca warto\u015b\u0107 liczbow\u0105 (np. 0 lub 1). Jakie znaczenie maj\u0105 specyfikatory formatu w C Scanf i jak wp\u0142ywaj\u0105 na interpretacj\u0119 danych Specyfikatory formatu okre\u015blaj\u0105 typ danych oraz spos\u00f3b ich parsowania. B\u0142\u0105d w specyfikatorze oznacza b\u0142\u0119dne dane w pami\u0119ci, cz\u0119sto bez ostrze\u017cenia. Najwa\u017cniejsze specyfikatory: Typ danych Specyfikator Opis int %d liczba ca\u0142kowita dziesi\u0119tna float %f liczba zmiennoprzecinkowa double %lf liczba double char %c pojedynczy znak string %s ci\u0105g znak\u00f3w (do spacji) Przyk\u0142ad wielokrotnego odczytu: J\u0119zyk Kod C int a; float b; scanf(&#8222;%d %f&#8221;, &amp;a, &amp;b); C++ int a; float b; scanf(&#8222;%d %f&#8221;, &amp;a, &amp;b); Python a, b = map(float, input().split()) Istotny szczeg\u00f3\u0142: %s nie zabezpiecza przed przepe\u0142nieniem bufora. Je\u015bli u\u017cytkownik wpisze wi\u0119cej znak\u00f3w ni\u017c przewidziano, pami\u0119\u0107 zostaje nadpisana. Bezpieczniejsza wersja: J\u0119zyk Kod C char buf[10]; scanf(&#8222;%9s&#8221;, buf); Liczba 9 oznacza maksymaln\u0105 liczb\u0119 znak\u00f3w + 1 na znak \\0. Dlaczego C Scanf bywa \u017ar\u00f3d\u0142em b\u0142\u0119d\u00f3w i jak wygl\u0105da kontrola poprawno\u015bci danych wej\u015bciowych Najcz\u0119stszy b\u0142\u0105d: ignorowanie warto\u015bci zwracanej przez scanf. Zasada: Przyk\u0142ad kontroli: J\u0119zyk Kod C int x; if (scanf(&#8222;%d&#8221;, &amp;x) != 1) { printf(&#8222;Blad\\n&#8221;); } Przyk\u0142ad problematyczny: Drugi typ problemu: pozostawienie znak\u00f3w w buforze wej\u015bcia. Przyk\u0142ad: J\u0119zyk Kod C int x; char c; scanf(&#8222;%d&#8221;, &amp;x); scanf(&#8222;%c&#8221;, &amp;c); Problem: Rozwi\u0105zanie: J\u0119zyk Kod C scanf(&#8221; %c&#8221;, &amp;c); Spacja przed %c powoduje pomini\u0119cie bia\u0142ych znak\u00f3w. Jak u\u017cywa\u0107 C Scanf w kontek\u015bcie r\u00f3\u017cnych typ\u00f3w danych i struktur wej\u015bciowych Z\u0142o\u017cone wej\u015bcie wymaga dok\u0142adnego dopasowania formatu. Przyk\u0142ad: wczytanie daty: J\u0119zyk Kod C int d,m,y; scanf(&#8222;%d-%d-%d&#8221;, &amp;d, &amp;m, &amp;y); Dane wej\u015bciowe: 15-04-2026 Dla tablic: J\u0119zyk Kod C int a[3]; scanf(&#8222;%d %d %d&#8221;, &amp;a[0], &amp;a[1], &amp;a[2]); Dla p\u0119tli: J\u0119zyk Kod C for(int i=0;i&lt;3;i++) scanf(&#8222;%d&#8221;, &amp;a[i]); Wczytywanie string\u00f3w ze spacjami wymaga u\u017cycia alternatyw: J\u0119zyk Kod C char buf[100]; fgets(buf, 100, stdin); scanf(&#8222;%s&#8221;) zatrzymuje si\u0119 na pierwszej spacji, fgets czyta ca\u0142\u0105 lini\u0119. Jakie s\u0105 alternatywy dla C Scanf i kiedy ich u\u017cycie ma sens w praktycznych projektach W praktyce produkcyjnej scanf jest cz\u0119sto zast\u0119powany: Przyk\u0142ad: J\u0119zyk Kod C char buf[100]; fgets(buf,100,stdin); sscanf(buf,&#8221;%d&#8221;,&amp;x); Zalety: W C++: J\u0119zyk Kod C++ int x; std::cin &gt;&gt; x; W Pythonie: J\u0119zyk Kod Python x = int(input()) Uwagi praktyczne wynikaj\u0105ce z realnych problem\u00f3w przy pracy z wej\u015bciem u\u017cytkownika Cz\u0119sty scenariusz: program \u201edzia\u0142a u mnie\u201d, ale u u\u017cytkownika zawiesza si\u0119 przy wpisaniu litery zamiast liczby. FAQ Dlaczego scanf nie dzia\u0142a przy wpisaniu tekstu zamiast liczby?Bo %d oczekuje liczby. Przy tek\u015bcie funkcja zwraca 0 i nie przypisuje warto\u015bci. Czy scanf jest bezpieczny?Nie w podstawowej formie. Wymaga limit\u00f3w (%Ns) i kontroli zwracanej warto\u015bci. Dlaczego scanf pomija wej\u015bcie przy %c?Bo w buforze zostaje znak nowej linii. Spacja przed %c rozwi\u0105zuje problem. Czy scanf mo\u017cna stosowa\u0107 w projektach produkcyjnych?Rzadko. Zwykle zast\u0119puje si\u0119 go fgets + parsowanie. Czym r\u00f3\u017cni si\u0119 %f od %lf?%f dla float, %lf dla double. W scanf to rozr\u00f3\u017cnienie ma znaczenie. Jak wczyta\u0107 tekst ze spacjami?Nie u\u017cywa\u0107 %s, tylko fgets. Zako\u0144czenie scanf daje du\u017c\u0105 kontrol\u0119 nad wej\u015bciem, ale wymaga precyzji i \u015bwiadomo\u015bci dzia\u0142ania. Bez tego bardzo \u0142atwo wprowadzi\u0107 b\u0142\u0119dy trudne do wykrycia, szczeg\u00f3lnie przy danych od u\u017cytkownika. \u0179r\u00f3d\u0142o Foto: Freepik<\/p>\n","protected":false},"author":1,"featured_media":1232,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[27],"tags":[],"class_list":["post-1231","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jezyk-programowania"],"_links":{"self":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/comments?post=1231"}],"version-history":[{"count":1,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1231\/revisions"}],"predecessor-version":[{"id":1233,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/posts\/1231\/revisions\/1233"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media\/1232"}],"wp:attachment":[{"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/media?parent=1231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/categories?post=1231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trzykody.pl\/index.php\/wp-json\/wp\/v2\/tags?post=1231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}