Instrukcje if, if-else, switch, operacje wejścia i wyjścia.
Algorytmy wykorzystujące warunki
2.1. Operacje wejścia /wyjścia
printf
Funkcja printf jest zadeklarowana w pliku nagłówkowym <stdio.h>. Funkcja wysyła znaki na standardowe wyjście o nazwie stdout.
Podstawowy nagłówek
int printf ( const char *format [, argument, ...]);
format - łańcuch formatujący, zawierający specyfikatory formatu i zwykłe znaki
argument,...- ciąg argumentów
Funkcja wykonuje następujące czynności:
· otrzymuje wiele argumentów w postaci wyrażeń
· wykorzystuje do każdego argumentu tzw. specyfikator formatu (pierwszy specyfikator do pierwszego argumentu, drugi do drugiego itd.) np. %i do argumentu typu całkowitego
· wysyła na wyjście (stdout) np. ekran zawartość łańcucha formatującego
· w przypadku błędu zwraca znak EOF
Uwagi:
· musi być tyle argumentów, ile jest specyfikatorów
· jeśli istnieje więcej argumentów niż specyfikatorów, są one ignorowane
Specyfikator formatu
% [flags] [width] [.prec] [F|N|h|l|L] type_char
type_char obligatoryjny znak konwersji
dla liczb całkowitych i wskaźnika
%d, % i – całkowita dziesiętna liczba ze znakiem
%o – całkowita ósemkowa bez znaku
%u - całkowita dziesiętna bez znaku
%x - całkowita heksadecymalna bez znaku z literami (a, b, c, d, e, f)
%X - całkowita heksadecymalna bez znaku z literami (A, B, C, D, E, F)
dla liczb rzeczywistych
%f – rzeczywista: format [-] dddd.dddd
%e, %E – rzeczywista: format z wykładnikiem e[+/-]ddd, E[+/-]ddd
%g, %G – wybrany krótszy format: f lub e/E
dla znaków i łańcuchów
%c – pojedynczy
%s – łańcuch, drukuje znaki do znaku kończącego łańcuch –zero
%% - wyprowadza znak %
dla wskaźników
%n – wyprowadza tyle znaków, ile podano pod adresem skojarzonym z n
%p - zależnie od modelu pamięci format: XXXX:YYYY lub YYYY
flags opcjonalne
- justifikacja tekstu od lewej, spacje z prawej strony, jeśli muszą być dołożone
+ wyprowadzana liczba jako tekst zawsze ze znakiem + lub –
spacja – wyprowadzana liczba jako tekst zawiera albo znak – albo spację
# - używany, gdy konwersja argumentu przebiega wg alternatywnej formy (gdy ósemkowa, znak 0 na początku, gdy heksagonalna to na począku 0x lub 0X)
[width] opcjonalne – minimalna liczba znaków do wyprowadzenia tekstu uzupełniana spacjami lub zerami
n - uzupełnianie spacjami do rozmiaru n znaków
0n - uzupełnianie zerami do rozmiaru n znaków
* - przed argumentem związanym z % umieszcza się wyrażenie określające aktualny rozmiar wyprowadzanego tekstu
[.prec] opcjonalne – maksymalna liczba znaków części dziesiętnej
n – liczba cyfr części dziesiętnej
* - przed argumentem związanym z % umieszcza się wyrażenie określające
aktualny rozmiar części dziesiętnej
[F|N|h|l|L] (opcjonalne) wewnętrzny modyfikator rozmiaru
N = near pointer (za wyjątkiem modelu huge)
h = short int
F = far pointer
l = long int, double
L = long double
scanf
Funkcja scanf jest zadeklarowana w pliku nagłówkowym <stdio.h>. Funkcja pobiera znaki ze standardowego wejścia stdin np. z klawiatury
int scanf ( const char *format [, address, ...]);
address,...- ciąg adresów argumentów
· otrzymuje wiele argumentów, które pobiera znak po znaku z wejścia stdin np. z klawiatury
· wykorzystuje do każdego argumentu tzw. specyfikator formatu (pierwszy specyfikator do pierwszego argumentu, drugi do drugiego itd.) np. %i do adresu argumentu typu całkowitego,
· wysyła daną po konwersji, zgodną ze specyfikatorem formatu, pod związany z nią adres
· funkcja zwraca liczbę poprawnie pobranych danych, poddanych konwersji i wysłanych pod wskazany adres – różna liczba specyfikatorów i wynik scanf oznacza błąd
· zwraca znak EOF, jeśli nie ma danych (naciśnięto np. F6)
· musi być tyle adresów argumentów, ile jest specyfikatorów, dopasowanych do typu danej
· ciąg znaków jest czytany do białych znaków (np. spacji)
% [*] [width] [F|N] [h|l|L] type_char
type_char znak specyfikatora konwersji
%d, %i - liczba dziesiętna ze znakiem
%u - liczba dziesiętna bez znaku
%x - liczba w kodzie szesnastkowym (bez znaku)
%o - liczba w kodzie ósemkowym (bez znaku)
%f , %e, %g - liczba zmiennoprzecinkowa
%c - pojedynczy znak
%s - łańcuch znaków
[*] opcjonalne – pomija się wynik konwersji wprowadzonego łańcucha
[with] opcjonalne – ogranicza się liczbę czytanych znaków
[F|N] opcjonalne – modyfikator rozmiaru wskaźnika
F – far , N – near
[h|l|L] opcjonalne – modyfikator typu argumentu
h = short int (d, u, x , o)
l = long int (d, u, x , o)
l = double (f, e, g)
L = long double (f, e, g)
Ograniczniki pól konwersji wejściowych
C – jeden znak
[...] – znak spoza zestawu znaków podanych
[^...] – znak z zestawu
i, d, o, u, x, e, f, g, s, p - znak biały, znak, który nie pasuje do pola
n - nie posiada pola znakowego, lecz przechowa liczbę znaków
wprowadzonych znaków z klawiatury
Przykład –printf i scanf
#include <stdio.h>
#include <conio.h>
void main()
{ long double ld;
float f;
long l;
char tab1[80], tab2[80], tab3[80];
int ile, i, j;
clrscr();
scanf("%Lf",&ld);
printf("%Lf\n",ld);
scanf("%li",&l);
printf("%li\n",l);
scanf("%f",&f);
printf("%.2f\n",f);
printf("%10.2f\n",f);
scanf("%f%i",&f,&i);
printf("%.*f\n",i,f);
scanf("%f%i%i",&f,&i,&j);
printf("%*.*f\n",j,i,f);
fflush(stdin);
scanf ("%[^\n\r]", tab1);
printf ("%s\n",tab1);
scanf ("%[0123456789]",tab2);
printf ("%s\n",tab2);
scanf("%[^\n\r]%n",tab3,&ile);
printf ("%s %i\n",tab3,ile);
getch();
}
Instrukcje wyboru if, if else
if ( <wyrażenie> ) <instrukcja>;
if ( <wyrażenie> ) <instrukcja1>;
else <instrukcja2>;
{
char znak;
printf("\nPodaj znak: ");
znak = getch();
if ( znak == 27 )
printf("\nPodałeś ESC.");
else
printf("\nNie podałeś ESC.");
int a, blad;
...
chesschempion