This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
dydaktyka:cprog:2015:basic_stdio [2015/10/14 00:40] pkleczek [Wypisywanie danych] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Interakcja z użytkownikiem ====== | ||
- | We wszystkich systemach komputerowych do przechowywania informacji służą pliki (//file//). Pliki zawierają powiązane ze sobą wzajemnie informacje. Ponieważ w komputerach wszystkie pliki reprezentowane są jako ciągi bitów pogrupowanych w bajty, język C traktuje plik jako ciąg bajtów, czyli strumień (//stream//). Język C traktuje wszystkie strumienie danych (do/z pliku) i wszystkie pliki dokładnie tak samo. | ||
- | Dodatkowo w C są trzy strumienie plikowe (//file stream//), które są standardowo wstępnie otwierane dla nas: | ||
- | * stdin – standardowe wejście (//standard input//) – do odczytu; zazwyczaj powiązany z klawiaturą | ||
- | * stdout – standardowe wyjście (//standard output//) – do zapisu; zazwyczaj powiązany z monitorem terminala | ||
- | * stderr – standardowe wyjście dla komunikatów o błędach (//standard error//) | ||
- | |||
- | Nagłówki funkcji języka C służących do obsługi wejścia/wyjścia znajdują się w pliku nagłówkowym ''stdio.h''. | ||
- | |||
- | ===== Wypisywanie danych ===== | ||
- | |||
- | Główną funkcja służąca do wypisywania danych na standardowe wyjście (zazw. oznaczające wyświetlanie danych na ekranie terminala) jest ''printf()''. | ||
- | |||
- | Prototyp funkcji: ''%%int printf ( const char * format, ... );%%'' | ||
- | |||
- | Przykład: | ||
- | <code c> | ||
- | printf("Stan konta #%d wynosi %f zlotych.\n", 1, saldo); | ||
- | </code> | ||
- | * ''%%"Stan konta wynosi %.2f zlotych.\n"%%'' -- łańcuch sterujący | ||
- | * ''%d'', ''%.2f'' -- specyfkatory konwersji | ||
- | * ''1, saldo'' -- lista wyrażeń | ||
- | |||
- | :?: Tekst ograniczony cudzysłowami (''%%"..."%%'') to łańcuch znaków. Na razie pozostanie on dla Ciebie czarną magią, zajmiemy się tym zagadnieniem za parę zajęć... Na chwilę obecną po prostu powiedz sobie //Aha, stosując printf() muszę na początku wpisać tekst w cudzysłowach!// | ||
- | |||
- | Podstawowe specyfikatory konwersji: | ||
- | ^ specyfikator ^ typ wartości ^ | ||
- | | '%c' | ''char'' | | ||
- | | '%d' | ''int'' | | ||
- | | '%f' | ''float'', ''double'' | | ||
- | |||
- | Podstawowe opcje formatowania: | ||
- | * wyrównanie pola wyjściowego (np. ''%8d'') | ||
- | * ilość miejsc po przecinku (np. ''%.3f'') | ||
- | |||
- | W domu zapoznaj się dokładniej z [[http://www.cplusplus.com/reference/cstdio/printf/|dokumentacją funkcji printf()]]. Zobacz, jakie inne specyfikatory i opcje formatowania udostępnia ta funkcja -- otrzymywanie czytelnych wyników działania programu to podstawa sukcesu :-) | ||
- | |||
- | Sprawdź, co się stanie w przypadku użycia nieodpowiednich specyfikatorów konwersji: | ||
- | <code c conversion_errors.c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | int main() | ||
- | { | ||
- | int num = 300; | ||
- | printf("%d %c\n", num, num); | ||
- | printf("%f %lf\n", num, num); | ||
- | |||
- | float nf = 3.0f; | ||
- | printf("%f %d\n", nf, nf); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | Jak sądzisz, dlaczego tak się dzieje? | ||
- | |||
- | :!: Upewnij się, że na końcu łańcucha sterującego znajduje się znak nowej linii ''\n'' (inaczej może się zdarzyć, że tekst do wyświetlenia utknie w buforze). | ||
- | |||
- | ===== Odczyt danych ===== | ||
- | |||
- | Główną funkcja służąca do pobierania danych ze standardowego wejścia (zazw. z klawiatury) jest ''scanf()''. | ||
- | |||
- | Funkcja ta zamienia wpisywany tekst na wartości odpowiednich typów zgodnie z zadanymi przez programistę specyfikatorami konwersji. | ||
- | |||
- | ''scanf()'' pobiera wskaźniki do zmiennych (na chwilę obecną nie musisz nic wiedzieć o wskaźnikach, po prostu dodaj symbol ''&'' przed nazwą zmiennej | ||
- | |||
- | podstawowe specyfikatory: %c, %d, %f, %lf |