InOut.doc

(61 KB) Pobierz
1

 

1. Wprowadzanie danych z klawiatury – funkcja scanf

 

 

 

Deklaracja

int  scanf ( const  char  *format,  wskaźnik,  wskaźnik, ... ) ;

Biblioteka

stdio.h

Działanie

Funkcja scanf wczytuje kolejne pola (ciągi znaków), ograniczone znakiem spacji  ' '  lub nowej linii '\n'. Obrazy wczytywanych znaków są wyświetlane na ekranie monitora. Liczba wczytywanych  pól i sposób ich przetwarzania są zadawane za pomocą pierwszego  argumentu funkcji scanf, oznaczonego identyfikatorem format,  którego wartością jest ciąg znaków (teskt). Ciąg ten składa się z pewnej liczby wzorców konwersji - liczba wzorców występujących w formacie określa liczbę pól wczytywanych ze strumienia wejściowego (klawiatury) i liczbę wskaźników będących dalszymi argumentami funkcji   scanf . Wzorzec konwersji ma  następującą postać:

     %   [  *  ]  [  szerokość  ]  [  prefiks  ]   znak_konwersji

Każdy wzorzec rozpoczyna się zawsze od znaku procenta %,   składniki umieszczone w nawiasach prostokątnych nie muszą występować. Znak gwiazdki * użyty we wzorcu nakazuje pominąć kolejne pole znaków ze  strumienia wejściowego. Szerokość określa maksymalną liczbę znaków, które mają być pobrane z kolejnego pola. Pole to może być krótsze niż zadana szerokość - w takim przypadku przetworzone będą jedynie znaki znajdujące się przed znakiem spacji lub nowej linii. Prefiks i znak_konwersji określają sposób przetworzenia znaków pola - wynikiem tego przetwarzania jest najczęściej wartość binarna liczby określonego typu. Kolejne wzorce konwersji są powiązane z kolejnymi wskaźnikami będącymi dalszymi argumentami funkcji scanf  - obliczona wartość binarna liczby jest wprowadzana do obszaru pamięci wskazanego przez związany z danym wzorcem wskaźnik. Zakłada się przy tym, że typ wskaźnika związanego z wzorcem jest taki sam, jak typ konwersji zadanej w tym wzorcu. W tabelach podano znaczenie poszczególnych znaków konwersji i prefiksów

 


 

znak k.

   wejściowe pole znaków

   typ wskaźnika

    

d

liczba całkowita dziesiętna    

int* 

      

D

liczba całkowita dziesiętna    

long* 

 

o

liczba całkowita oktalna       

int*

  

O

liczba całkowita oktalna       

long* 

 

i

liczba całkowita dziesiętna, oktalna lub heksadecymalna

int* 

  

I

liczba całkowita dziesiętna, oktalna lub heksadecymalna

long* 

  

u

liczba całkowita dziesiętna bez znaku

unsigned int* 

 

U

liczba całkowita dziesiętna bez znaku

unsigned long*

  

x

liczba całkowita heksadecymalna

int* 

 

X

liczba całkowita heksadecymalna

long* 

 

   e, E

liczba zmiennopozycyjna      

float*

 

f

liczba zmiennopozycyjna        

float* 

 

   g, G

liczba zmiennopozycyjna      

float*

 

s

ciąg znaków                    

char* 

  

c

znak                           

char* 

 

 

prefiks 

   znaki konwersji 

   typ wskaźnika

 

h

d, i, o, u, x 

short*

 

l

d, i, o, u, x 

long*  

 

 

e, f, g       

double*

 

L

e, f, g       

long double*     

 

 

Pola reprezentujące liczby (poza konwersją  u, U ) mogą  rozpoczynać się od znaków plus  +  lub minus  - . W przypadku  wczytywania ciągu znaków (konwersja s ) kody kolejnych znaków są  lokowane w kolejnych bajtach pamięci, począwszy od bajtu wskazanego  przez wskaźnik związany z danym wzorcem konwersji. Konieczne więc jest zarezerwowanie odpowiednio dużego obszaru pamięci, w którym znaki te będą umieszczane. Po ostatnim wczytanym znaku (różnym od znaku spacji lub nowej linii) jest umieszczany znak końca ciągu o wartości 0. Za pomocą konwersji s nie można wczytać tekstu złożonego z kilku słów oddzielonych spacjami. W takim przypadku można skorzystać z konwersji wyliczeniowej o postaci:

-~]

W nawiasach klamrowych podano przedział znaków ASCII (od znaku spacji do znaku tyldy), który będzie akceptowany i wprowadzany. Pierwszy znak spoza tego przedziału (czyli np. znak nowej linii) kończy wprowadzany tekst. Podczas wprowadzania znaków z klawiatury można używać klawisza Backspace do kasowania poprzednio wprowadzonych znaków. Prefiks umieszczony przed znakiem konwersji redefiniuje znaczenie tego znaku. 

Wynik

Wynikiem funkcji scanf jest liczba pól znaków, które zostały poprawnie wczytane, poddane konwersji, a obliczone wartości zostały zapamiętane.    

  Przykład 

#include  <stdio.h>  

void  main ( void )

{  

     ............

     char  cZnak ;

     int  nElement,  nSkładnik,  *pnAdres  =  &nSkładnik ;  

     int  anTablica [ 20 ] ; 

     long  lDługi,  lPodłużny ;

     float  flUłamek ;  

     double  dbDokładny ;  

      long double  ldPrecyzyjny ; 

      char  *szFormat  =  "%f%lf%Lf" ; 

      char  *szSłowo  =  new char [ 10 ] ;  

      char  acZnaki [ 16 ] ; 

      char  acTekst [ 65 ] ;   

      // 

      scanf ( "%c%d",  &cZnak,  &nElement);     //  identyfikatory

      scanf ( "%i",  pnAdres ) ;                            //  wskaźnik

      scanf ( "%d%d",  &anTablica [ 0 ], &anTablica [ 19 ] ) ;

      scanf ( "%D%ld",  &lDługi,  &lPodłużny ) ;

      scanf ( szFormat, &flUłamek, &dbDokładny, &ldPrecyzyjny) ; 

      scanf( "%s%s", szSłowo, acZnaki ) ; 

      scanf ( "%[ -~]",  acTekst ) ;

      ..........

}

  Uwaga

Funkcja scanf  przerywa działanie w przypadku napotkania znaku niedozwolonego (np. znaku litery w liczbie całkowitej). Znak ten nie jest usuwany ze strumienia wejściowego, co niekiedy powoduje zapętlenie programu. Sytuacji tej można uniknąć, sprawdzając liczbę przetworzonych poprawnie pól znakowych, przekazywaną jako wynik funkcji scanf.

 

 

2. Wyprowadzanie danych na monitor ekranowy – funkcja printf

 

 

 

Deklaracja

  int  printf (const  char  *format, wyrażenie, wyrażenie, ... ) ;      

Biblioteka

  stdio.h

Działanie

Funkcja printf umożliwia wyprowadzanie ciągów znaków reprezentujących wartości wyrażeń, które są jej argumentami. Sposób wyprowadzania określa argument format będący ciągiem znaków zawierającym:    

-  znaki przesyłane bezpośrednio na ekran monitora,

- wzorce konwersji definiujące sposób przetwarzania wartości
     wyrażeń na ciągi znaków. 

Liczba wzorców konwersji powinna być równa liczbie wyrażeń, kolejne wzorce określają sposób przetwarzania wartości kolejnych wyrażeń. Wzorzec konwersji ma postać:

  % [ opis ] [  szerokość  ]  [ . precyzja ]  [  prefiksznak_konwersji    

Wzorzec konwersji rozpoczyna się od znaku procentu %, składniki zapisane w nawiasach kwadratowych mogą nie występować. Prefiks i znak_konwersji określają sposób przekształcania wartości wyrażenia odpowiadającego danemu wzorcowi konwersji na ciąg znaków -  składniki te muszą być dostosowane do typu wartości wyr...

Zgłoś jeśli naruszono regulamin