5. Operaţii De I/e Cu Tastatura/monitorul

  • Uploaded by: gabyroot18
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View 5. Operaţii De I/e Cu Tastatura/monitorul as PDF for free.

More details

  • Words: 699
  • Pages: 20
5. Operaţii de I/E cu tastatura/monitorul

• Funcţiile de intrare/ieşire cu tastatura/monitorul sunt incluse în fişierul STDIO.H #include < stdio.h > • Operaţiile de I/E se realizează cu conversie

Scrierea Monitor

M.P.

1

2

Format intern (binar: virgulă fixă, virgulă mobilă)

Format afişabil (ASCII) Format de scriere

Citirea M.P. Tastatura

1

Format extern (ASCII)

2

Format intern Format de citire

Coduri de conversie în formate Ce sunt formatele de intrare/ieşire? Sunt: a) •



Şabloane ale modului de reprezentare externă (ASCII) a datelor. Pascal: - la citire format implicit; - la scriere format implicit şi format controlat (:n:m). C: - format explicit mult mai dezvoltat şi convenabil programatorilor.

b) Parametri de indicare a tipului de conversie intern

extern

Exemplu int d; d = 65; printf (“%i”, d); /*scrie 65; conversie ca intreg*/ printf (“%c”, d); /*scrie A; conversie ca un caracter*/ %i, %c sunt coduri de format (coduri de conversie)

Observaţii • Fiecărei variabile (obiect) scrisă/citită trebuie să-i corespundă un cod de conversie în format. • Codurile de conversie din format se redau ca şiruri, care preced obiectele scrise/citite. De fapt, formatele se exprimă în “minilimbaj” (există reguli de construire a şirurilor care redau formatul).

De exemplu: % [aspect] [lăţime] [.precizie] cod_conversie [secvenţă_comandă] • Codurile de conversie se pun în corespondenţă cu “obiectele” de la stânga la dreapta: int a, b; printf(“Nr. 1 = %i, Nr. 2 = %i”, a, b);

Funcţiile de I/E au următoarea sintaxă a parametrilor: ( < sir_format >, obiect1, obiect2, … ) • Şirul de format este încadrat între ghilimele (este şir)! • Fiecărui cod de format trebuie să-i corespundă exact un obiect.

Dacă tipul obiectului nu concordă cu specificatorul (codul) de format, se obţin rezultate imprevizibile (compilatorul nu controlează corespondenţa. DE CE?)

Codurile de format Cod format

Ieşirea formatizată

Observaţii

d

zecimal cu semn (int)

întregi

i

zecimal cu semn (int)

întregi

o

octal fără semn

întregi

u

zecimal fără semn (int)

întregi

x

printf: hexazecimal fără semn (int) litere mici scanf: hexazecimal (int)

întregi

X

printf: hexazecimal fără semn (int) litere mari scanf: hexazecimal (int)

întregi

f

virgulă mobilă [-]dddd.ddd

virgulă mobilă

e

virgulă mobilă [-]d.ddd.e[+/-]dd

virgulă mobilă

g

ca şi f sau e, depinde de precizie

virgulă mobilă

E

ca şi e, utilizează litera E pentru exponent

virgulă mobilă

G

ca şi g, utilizează litera E pentru exponent

virgulă mobilă

c

imprimă un singur caracter

întregi

s

imprimă caractere pînă la ‘\0’ sau pînă la .prec

şiruri

%

caracterul %

%% => %

RETINEŢI, PENTRU PRACTICĂ: • Verifică pe teste intrările/ieşirile, modificând până la obţinerea formatelor externe dorite; • Analizează cu grijă corespondenţa tipul de obiect cu codul de conversie; • Aşteaptă-te la “bug-uri”.

Funcţii de citire/scriere cu format Grupa A: Funcţii generale

Scriere: printf( <sir_format>, , ,… );

scrie standard pe stdout.

Citire: scanf(<sir_format>, , , …);

citeşte standard de la stdin.

ATENŢIE: ESTE ŞMECHERIA MODULUI ÎN CARE AU FOST CONCEPUTE FUNCŢIILE: • apelul printf transferă valori; • apelul scanf transferă adrese (&). SCRIERE: obiectele pot fi variabile, constante, expresii sau [apeluri de] funcţii; CITIRE: numai adrese de variabile.

Câteva precizări cu privire la citire: • Datele externe pot fi: - separate prin spaţiu (spaţiu, TAB, CR/LF) sau virgulă; - şiruri cu lungimi prestabilite (se dă lungime de şir extern).

Exemple int x, y; scanf(“%i %i”, &x, &y); //separare prin spaţiu scanf(“%i,%i”, &x, &y); //separare prin virgulă scanf(“%5i%2i”, &x, &y); /*bună la fişierele magnetice x este şir de 5 caractere y este şir de 2 caractere */

• Deoarece masivele de date sunt pointeri, când este posibilă specificarea numelui masivului, nu mai trebuie &. Exemple: prelucrarea unui nume: char den[20]; printf(“Nume:”); scanf(“%s”, den); //Atenţie: den este pointer char den[20]; printf(“Caracter:”); scanf(“%c”, den[0]); /* Atenţie: den[0] nu este pointer; deci trebuie &den[0] */

ATENŢIE: La citire, şirul se încheie cu CR/LF sau spaţiu!!! (chiar dacă se dă lungime de câmp) Trebuie găsite alte soluţii!!

Grupa B: Funcţii de I/E specializate pentru şiruri puts(sir); Scrie pe ecran un şir urmat de CR/LF. puts(“ok”); ↔ printf(“ok\n”); gets(masiv_sir); Citeşte un şir până la CR/LF (nu până la spaţiu);

Grupa C: Funcţii de I/E specializate pentru caractere putchar(obiect_caracter); Scrie un caracter, fără CR/LF!! getchar(o); Citeşte un caracter cu ecou. getch(o); Citeşte un caracter fără ecou.

Related Documents


More Documents from "Snoopy Gonzalez"