User Tools

Site Tools


dydaktyka:cprog:2016:basic_stdio

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
dydaktyka:cprog:2016:basic_stdio [2016/10/13 11:03]
pkleczek [Odczyt danych]
— (current)
Line 1: Line 1:
-====== Interakcja z użytkownikiem ====== 
- 
-===== Cel laboratorium ===== 
- 
-  * Zapoznanie ze sposobem wypisywania danych na ekran. 
-  * Zapoznanie ze sposobem wczytywania danych z klawiatury. 
- 
-===== Tytułem wstępu... ===== 
- 
- 
-//(dla dociekliwych)//​ 
- 
-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 \\ (dla przypomnienia:​ znak ''​\n''​ oznacza przejście do nowej linii) 
-  * ''​%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()]]. Nie czytaj wszystkiego "od deski do deski",​ tylko zobacz, jakie inne specyfikatory i opcje formatowania udostępnia ta funkcja -- otrzymywanie czytelnych wyników działania programu to podstawa sukcesu :-) \\ 
-Zobacz też, z jakich sekcji składa się dokumentacja takiej funkcji (np. oczekiwany format argumentów,​ zwracana wartość, przykłady użycia...) 
- 
-Sprawdź, co zostanie wypisane w przypadku użycia nieodpowiednich specyfikatorów konwersji: 
-<code c conversion_errors.c>​ 
-#include <​stdio.h>​ 
-#include <​stdlib.h>​ 
- 
-int main() 
-{ 
-    int num = 300; 
-    float nf = 3.0f; 
- 
-    printf("​%d %c\n", num, num); 
-    printf("​%f %lf\n",​ num, num); 
-    printf("​%f %d\n", nf, nf); 
- 
-    return 0; 
-} 
-</​code>​ 
-  * Jak sądzisz, dlaczego tak się dzieje? 
-  * Przejrzyj listę ostrzeżeń zgłoszonych przez kompilator -- na ich podstawie możesz bez trudu odnaleźć źródło problemów. 
- 
-:!: 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 konwersji są analogiczne do wykorzystywanych w funkcji ''​printf()'',​ z tym że ''​scanf()''​ dodatkowo posiada ''​%lf''​ do wczytywania wartości typu ''​double''​. 
- 
-Przykład: 
-<code c scanf.c> 
-#include <​stdio.h>​ 
- 
-int main() 
-{ 
-  int a = 0 
-  int b = 0; 
- 
-  printf("​Podaj wspolrzedne punktu: "); 
-  scanf("​%d %d", &a, &b); 
-  ​ 
-  a = -a; 
-  ​ 
-  printf("​Po odbiciu symetrycznym wzgledem OX: %d %d\n", a, b); 
- 
-  return 0; 
-} 
-</​code>​ 
- 
-===== Zadania podsumowujące ===== 
- 
-Zadania bazują na treści tego laboratorium oraz laboratorium [[dydaktyka:​cprog:​2016:​data_types]]. 
- 
-:!: W przypadku "​dziwnego zachowania"​ programu podczas odczytu danych zaglądnij najpierw do [[http://​home.agh.edu.pl/​~pkleczek/​dokuwiki/​doku.php?​id=dydaktyka:​cprog:​faq#​funkcja_scanf_nie_czeka_na_wpisanie_przeze_mnie_danych|FAQ]]. 
- 
----- 
- 
-==== Zadanie STATS ==== 
- 
-([size=10]poziom trudności:​[/​size] {{stars>​2/​4}}) 
- 
-Wczytaj trzy liczby zmiennoprzecinkowe przy pomocy funkcji ''​scanf()''​. Wypisz ich sumę oraz średnią. Dobierz odpowiednie specyfikatory konwersji pod kątem typów użytych zmiennych. 
- 
- 
-==== Zadanie CASH ==== 
- 
-([size=10]poziom trudności:​[/​size] {{stars>​2/​4}}) 
- 
-Napisz program, który zamieni wczytaną wartość w dolarach na waluty: 
-  * euro (1 USD = 0,77 EUR) 
-  * złotówki (1 USD = 3,04 PLN) 
- 
-Wczytana wartość jest typu całkowitego. Obliczone wartości nowych walut mają być tak sformatowane,​ aby liczba była wyświetlona z dwoma miejscami po przecinku, a cała liczba zajmowała 7 pól. 
- 
-==== Zadanie CHAR ==== 
- 
-([size=10]poziom trudności:​[/​size] {{stars>​3/​4}}) 
- 
-Napisz program, który wczyta znak z klawiatury, a następnie wyświetli jego wartość w kodzie [[https://​pl.wikipedia.org/​wiki/​ASCII|ASCII]]. 
  
dydaktyka/cprog/2016/basic_stdio.1476349394.txt.gz · Last modified: 2020/03/25 11:46 (external edit)