Autor: Dondu
Niniejszy kurs języka C rozpoczniemy od poznania kilku podstawowych elementów, które umożliwią Ci wykorzystanie do nauki załączonego kompilatora CManiak.
Bez tej wiedzy nie zaczynaj
nauki języka C
w kursie na blogu !
w kursie na blogu !
.. . no chyba, że lubisz się męczyć.
Każdy przykład znajdziesz pod odpowiednim numerem w kompilatorze CManiak.
Pierwszy program.
Każdy program w języku C rozpoczyna się od wywołania funkcji main() i kończy na return 0:
Przykład 1:
main(){ return 0; }Ale żeby być zgodnym ze standardem kod powinien wyglądać tak:
int main(void){ return 0; }Powyższy program uruchomi się i od razu zakończy.
Pamiętaj!
Aby skompilować program, jego kod musi być zawarty w funkcji main().
Piszę o tym na czerwono, ponieważ wiele osób kopiuje ręcznie fragmenty programów, umieszczając je w kompilatorze bez niezbędnego otoczenia w postaci funkcji main() dziwiąc się, czemu kompilator wykazuje błędy podczas kompilacji.
Zobacz przykładowe kody w zakładce Przykłady kompilatora.
Zobacz przykładowe kody w zakładce Przykłady kompilatora.
Dodatkowo możesz definiować funkcje.
Hello world!
W kursie bardzo często będziemy wykorzystywać terminal kompilatora (zakładka Terminal) jako ekran do pokazywania wyników pracy programu. Wykorzystamy do tego poniższe funkcje, ale najpierw poznasz dyrektywę:
#include
Żeby korzystać z dostępnych funkcji musimy powiadomić kompilator gdzie się one znajdują. Służy do tego właśnie dyrektywa #include, po której podajemy linkowany (załączany) plik nagłówkowy (przykłady poniżej).
Czas na funkcje:
putchar(x)
nagłówek: <stdio.h>
Umieszcza w terminalu znak ASCII o kodzie x.
Przykład 2:
To spróbujmy wydrukować dużą literkę A (kod ASCII: 65):
#include <stdio.h> int main(void){ putchar(65); //65 w kodzie ASCII to duża literka A return 0; }
printf()
nagłówek <stdio.h>
Umieszcza w terminalu sformatowany ciąg znaków. Ta funkcja ma spore możliwości, ale teraz poznasz tylko tyle ile trzeba do niniejszego kursu języka C.
Przykład 3:
#include <stdio.h> int main(void) { printf("Hello World!"); //pisz w terminalu (ekranie) //printf("Oj! Coś nie tak!"); //usuń znaki komentarza przed printf //i zobacz co się stanie return 0; }Pierwszy printf() ładnie wydrukował napis Hello World! Po usunięciu znaków komentarza na początku drugiego printf(), niektórzy spodziewali się, że po oba napisy będą jeden pod drugim. Tymczasem zostały wydrukowane jeden za drugim, w dodatku bez spacji. Zastosujemy więc znak specjalny:
\n
czyli żądanie przejścia do nowej linii:
Przykład 4:
Wykonanie dwóch printf() jednego po drugim, ale ze znakiem \n:
printf("Hello World!\n"); printf("Teraz piszę w nowej linii.");
Przykład 5:
Znak \n można umieścić w dowolnym miejscu napisu, co spowoduje jego podział na linie:
printf("Hello World!\nTeraz piszę w nowej linii."); }
Wyświetlanie liczb
Teraz niezbędna wiedza o wyświetlaniu liczb za pomocą printf().Funkcja ta ma bardzo duże możliwości formatowania wyświetlanych danych liczbowych. Używa do tego symboli formatowania. Na razie poznasz tylko kilka z nich:
%d - liczba całkowita ze znakiem
%f - liczba zmiennoprzecinkowa ze znakiem
%x - szesnastkowa bez znaku
Przykład 6:
Zauważ, że w przykładzie dodałem znak specjalny \n , by wymusić nową linię:
printf("%d", 23); //dziesiętna całkowita ze znakiem printf("\n%f", -1.23); //zmiennoprzecinkowa ze znakiem printf("\n%x", 255); //w kodzie szestnastkowym
Dane tekstowe
Podobnie jest z danymi w postaci znaków ASCII. By je wyświetlić za pomocą printf(), użyjemy:
%c - pojedynczy znak
%s - łańcuch znaków
Przykład 7:
printf("%c", 65); //wyświetla znak ASCII o kodzie 65 printf("\n%s", "bardzo"); //wyświetla łańcuch znakówJak widzisz printf("%c", 65) odpowiada opisanej wcześniej putchar(65).
Przykład 8:
A teraz zmienimy nieco drugi printf() z przykładu powyżej, na następujący:
printf("CManiak jest%s fajny!", " bardzo");Czary mary i otrzymujemy napis: CManiak jest bardzo fajny!
Ale jak to się stało? Ponieważ printf() podstawia pod symbole formatowania następujące po sobie argumenty.
Przykład 9:
Argumentów może być więcej, a oddziela się je przecinkami:
printf("%s ma %d braci o łącznej wadze %f kg.", "Michał", 3, 201.45);Printf() po kolei od lewej strony analizował pierwszy argument którym jest "%s ma %d braci o łącznej wadze %f kg." i odnajdując znaki specjalne podstawiał kolejne argumenty oddzielone przecinkami.
Czyli symbolom znalezionym w pierwszym argumencie printf() przypisał odpowiednio:
%s - napis Michał
%d - liczbę 3
%f - liczbę 201.45
odpowiednio je formatując w zależności od symbolu formatowania, co opisałem wcześniej.
Więcej informacji na temat printf( ) znajdziesz tutaj: Rodzina instrukcji printf( )
Zanim przejdziesz do dalszych części kursu opanuj dobrze powyższą wiedzę oraz obsługę kompilatora CManiak.
1
No to zaczynamy. Skąd mam wiedzieć kiedy użyć jakiego include? Skąd mam wiedzieć że to ma być:
OdpowiedzUsuń#include
czy może i co one poszczególne oznaczają?
Wyjaśnij dokładnie co znaczy poniższe?
int main(void)
Zgaduję żę int main to initial main ? Ale po co w nawiasie (void) ? co to oznacza i dlaczego void a nie cokolwiek innego?
int oznacza typ argumentu, który ma być zwracany. W tym przypadku zwróci liczbę całkowitą. Gdy nie chcemy, aby funkcja cokolwiek zwracała używamy void. Z tego względu też jest w nawiasie void - nie pobieramy żadnych parametrów wejściowych. Można zostawić sam nawias "()" i domyślnie będzie w środku void.
Usuńcyt. "Można zostawić sam nawias "()" i domyślnie będzie w środku void"
Usuń... jednak warto się trzymać standardu:
5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:
int main(void) { }
C - Internationa standard ISO/IEC 9899:201x
Ten artykuł powstał po to, by wytłumaczyć tylko to, co jest niezbędne, by można było korzystać z pozostałych artykułów kurcu: Kursi C - Spis treści.
OdpowiedzUsuńDlatego nie wszystko dogłębnie jest wytłumaczone w tym miejscu. Po prostu nie zastanawiaj się nad tym tylko korzystaj z artykułów kursu i znajdujących się w nich przykładach w kompilatorze CManiak, a wiele się wyjaśni z tych pytań, które zadałeś.
Artykuł o funkcjach jest w trakcie pisania i nie ma go jeszcze w spisie treści, więc jeżeli chcesz już się z nim zapoznać to proszę: Funkcje
No zgoda, tylko że ja tak nie potrafię korzystać nie zastanawiając się co znaczy. Jeśli czegoś używam muszę wiedzieć co oznacza? Po co się to tak stosuje itp. Dla mnie korzystanie z czegoś gdy nie wiem co znaczy to tak jakbym próbował mówić w innym języku nie znając znaczenia poszczególnych słów.
OdpowiedzUsuńGdy korzysta się pierwszego w życiu roweru, nie zastanawia się jak dokładnie jak jest zbudowany i jak działa hamulec. Po prostu się go używa.
OdpowiedzUsuńI tak właśnie trzeba postąpić w tym przypadku, a w dalszej części kursu dowiesz się wszystkiego i zrozumiesz działanie.
To tym ważniejsze, że w języku C (jak w wielu innych) wiele rzeczy się zazębia i trzeba od czegoś zacząć.
To chociaż powiedz czemu zaczynając pisze się int main(void). Głównie chodzi mi o to co w nawiasie. Dlaczego tam nie może być czegoś innego? Na przykład wstawił bym wyraz (why)
OdpowiedzUsuńToż to Ci już odpowiedzieli ze int (skrot od integer) to typ zwracanej wartości funkcji i zwraca się ją instrukcją return 0 (przyjęło się że zero oznacza poprawne zakończenie funkcji a wszystkie inne wartości błąd) natomiast to co jest w nawiasie to są parametry funkcji czyli składowe użyte wewnątrz void (z angielskiego pustka) oznacza że funkcja nie przyjmuje żadnych parametrów możesz void pominąć i też nie wybuchnie. Co do #include to instrukcja ta jest instrukcją preprocesora i ona dosłownie wstawia zawartość pliku jakiś_plik.h w to miejsce, po co to robi a po to ze w pliku są definicję funkcji ktorych możesz potrzebować w programie, a żeby się dowiedzieć jakie to funkcje to możesz zajrzeć do pliku lub szukać w necie :)
UsuńW poprzednim moim komentarzu podałem Ci link do artykułu Funkcje, w którym jest to wyjaśnione pomimo, że artykuł jest w trakcie tworzenia.
OdpowiedzUsuńRozwiń skróty %s, %d, %f. Ja się uczę kojarząc całe nazwy a nie ich skróty. Inaczej dla mnie to nic nie znaczące literki ze znakami %.
OdpowiedzUsuńJest opisane w tym artykule w punkcie Wyświetlanie liczb. Czytaj od tego punktu, aż do końca artykułu.
OdpowiedzUsuńJeżeli ten opis Ci nie wystarczy, to zaglądnij do opisu funkcji printf() w spisie treści kursu.
Odnośnie przykładu nr 9. Dlaczego kompilator sam nie wybierze sobie odpowiedniej zmiennej i muszą one być ustawione w odpowiedniej kolejności?
OdpowiedzUsuńNa przykład zmiana kodu na:
printf("%s ma %d braci o łącznej wadze %f kg.", 3,"Michał", 201.45);
Czyli zamiana miejscami zmiennej tekstowej ze zmienną liczbową spowoduje błąd kompilatora.
Na przykład masz 3 zmienne i wszystkie są tego samego typu czyli np. ciągami znaków do których stosujemy format %s. Jak kompilator ma zdecydować który gdzie podstawić?
OdpowiedzUsuńDlatego właśnie kompilator analizuje od lewej i po kolei podstawia dane wybierając je także od lewej.
------
Tak, zmiana miejscami spowoduje błąd, ponieważ typ danej nie będzie odpowiadał typowi formatu. Czyli np. "Michał" trafi na format %d.
Możesz to sprawdzić w CManiak'u.
Błąd w czasie przesyłu danych do kompilacji. Spróbuj ponownie.
OdpowiedzUsuńCO jest nie tak ?
Nie wiem, muszę sprawdzić. Ale dzisiaj nie dam niestety rady.
OdpowiedzUsuńJuż naprawione :)
OdpowiedzUsuńW końcu znalazłem zajęcie na nudne chwile w pracy:) Wielki plus za wbudowany kompilator!
OdpowiedzUsuńBardzo dobrze opisane, a przykłady z pierwszej części wręcz zachęcają by je modyfikować.
OdpowiedzUsuńNiby nic, a jak cieszy, że coś wychodzi!
Dzięki!
Muszę przyznać kawał dobrej roboty, pierwsze skojarzenia po przebrnięciu kilku artykułów tego kursu, to ma się wrażenie jakbym czytał interaktywną książke :D Super sprawa, nie muszę nic instalować, modyfikować, wszystko dobrze wytłumaczone, mogę poesperymentować z przykładami no po porstu b
OdpowiedzUsuńBardzo mnie cieszy że znalazłem ten kurs, interaktywny przewodnik można eksperymentować i uczyć się nawet w pracy, szkole dzięki temu CManiakowi. Super sprawa, autor odwalił kawał dobrej roboty. Tylko teraz nie dokońca wiem, do czego teraz mam przejść ;/
OdpowiedzUsuńCieszę się, że się podoba i przydaje :-)
UsuńNie rozumiem jednak o co pytasz ... Spis treści kursu znajdziesz klikając duży link Kurs języka C na początku tego artykułu. Na wszelki wypadek tutaj link podaję: Kurs języka C.
No chyba że pytasz od którego tematu w spisie treści zacząć :-) to zawsze jest problemem - leć po kolei i nie zrażaj się, że czegoś nie rozumiesz - w końcu wszystko połączy się w jedną całość.
Powodzenia!
Rewelacja!!!!!!!!!!!!!!!
OdpowiedzUsuńtyle, że są minusy (właściwie jeden):
Kurs jest tak popularny, że nie da się korzystać z CManiaka, bo serwer jest przeciążony
Pewnie ze względu na koszty nic się z tym nie da zrobić?
Sprawdziłem - działa szybko i sprawnie. Sprawdź proszę jeszcze raz z tym że wyczyść cały cache przeglądarki. Jeżeli nie pomoże, to spróbuj na innej przeglądarce.
OdpowiedzUsuńJak wyświetlić ciąg "\n"
OdpowiedzUsuńPodwójnym backslash-em np. printf ("\\n");
Usuń:) tylko kompilator ma nonstop zajęty serwer
OdpowiedzUsuńSprawdziłem - kompilator działa prawidłowo. Opisz może dokładnie z jakiej przeglądarki i na jakim systemie korzystasz.
UsuńDondu : świat jest lepszy dzięki takim ludziom jak Ty :)
OdpowiedzUsuńDziękuję :)
UsuńJest nas więcej: Autorzy artykułów
Rewelka, wszystkie opisy języka C jakie do tej pory znalazłem w sieci, opisują do momentu kodu źródłowego a dalej ??? sam się męcz
OdpowiedzUsuńTutaj przynajmniej autor pomyślał i wytłumaczył jak działa kompilator. Jeżeli coś by się jeszcze przydało:
1) jak z języka C konkretnie w ten sam sposób uczynić kod assemblerem ?
2) jak skorzystać z łączenia linkerem ?
Świetny kurs . Pozdrawiam.
Czy CManiak powinien działać?
OdpowiedzUsuńNiestety na razie nie. Ponowne włączenia planowane jest w trakcie wakacji tego roku.
Usuń