instrukcje if switch else operacje wej iwyj.doc

(77 KB) Pobierz
Języki i metody programowania C2

 

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

%cpojedynczy

%słańcuch, drukuje znaki do znaku kończącego łańcuch –zero

%%  - wyprowadza znak %

dla wskaźników

%nwyprowadza 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

 

Podstawowy nagłówek

int scanf  ( const char *format [, address, ...]);

 

format -               łańcuch formatujący, zawierający specyfikatory formatu i zwykłe znaki

address,...-              ciąg adresów argumentów

 

Funkcja wykonuje następujące czynności:

·       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)

 

 

Uwagi:

·       musi być tyle adresów argumentów, ile jest specyfikatorów, dopasowanych do typu danej

·       jeśli istnieje więcej argumentów niż specyfikatorów, są one ignorowane

·       ciąg znaków jest czytany do białych znaków (np. spacji)

 

 

 

Specyfikator formatu

 

% [*] [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);

  scanf("%f",&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);

  fflush(stdin);

  scanf ("%[0123456789]",tab2);

  printf ("%s\n",tab2);

  fflush(stdin);

  scanf("%[^\n\r]%n",tab3,&ile);

  printf ("%s %i\n",tab3,ile);

  fflush(stdin);

 

  getch();

}

 

 

 

Instrukcje wyboru if, if else

 

if ( <wyrażenie> )  <instrukcja>;

 

if ( <wyrażenie> )  <instrukcja1>;

   else  <instrukcja2>;

 

#include <stdio.h>    

#include <conio.h>    

void main()

{

    char znak;

    printf("\nPodaj znak: ");

    znak = getch();

    if ( znak == 27 )

       printf("\nPodałeś ESC.");

  }


#include <stdio.h>    

#include <conio.h>    

void main()

{

   char znak;

    printf("\nPodaj znak: ");

   znak = getch();

   if ( znak == 27 )

      printf("\nPodałeś ESC.");

  else

    printf("\nNie podałeś ESC.");

}


#include <stdio.h>

#include <conio.h>

void main()

{

              int a, blad;

...

Zgłoś jeśli naruszono regulamin