operabilus
B.O.F.H.
 Din: Sillycon Valley
Inregistrat: acum 18 ani
Postari: 200
|
|
Recapitulare Ce mai stiti din lectia anterioara ? Exista functia main() din care sunt apelate toate functiile, nu ? In functia main() punem cam tot ce ne intereseaza. In functia main() citim datele, din functia main() scriem datele. In programarea structurata (care e folosita in C) functia main() este cea mai importanta. De fapt... ii spune chiar si numele (main=principal).
Bun, v-ati prins care-i structura unui program in C, acum se pune intrebarea "Cum face altceva?", sau "Cum putem folosi functia main() ca programul sa faca ce vrem noi sa faca?". Pentru asta avem nevoie de functiile de intrare/iesire standard puse la dispozitie de C. Pentru a putea folosi functiile standard de intrare/iesire va trebui sa introducem un header. Un header este un fisier separat cu terminatia .h in care sunt definite functii, structuri, constante in functie de scopul headerului. In cazul nostru avem nevoie de headerul stdio.h (STanDard Input Output) care contine prototipul unor functii definite in libraria standard C. Headerul se introduce in program in felul urmator:
In UNIX din moment ce functiile sunt definite in libc (libraria standard) nu e neaparat necesar sa includem acest header dar e bine sa ne obisnuit sa-l includem pentru a fi mai usoara portarea programului pe un alt sistem de operare. Bun, sa trecem la fapte. Ce stie stdio asta si ce putem face cu el ?
getchar() functia getchar() citeste codul ASCII al unui caracter care il introduceti de la tastatura. Codul nu este citit direct de la tastatura ci dintr-un buffer din memorie in care se pastreaza toate caracterele introduse, buffer care se poate corecta folosind tasta backspace.
Functia se apeleaza sub forma:
Code:
char a;
a = getchar(); |
unde a este o variabila de tip caracter. Dupa executarea functiei a va lua valoarea returnata de getchar(), adica codul ASCII a tastei care am apasat-o.
putchar() Afiseaza codul ASCII al unui caracter. Se apeleaza de forma:
unde a este o variabila care contine un cod ASCII al unui caracter. Acum ca stim deja doua functii de intrare/iesire sa facem si un mic programel:
Code:
#include <stdio.h>
int main(){
char a;
a = getchar();
putchar(a);
putchar('n');
return 0;
} |
Pe linia 1 a programului am inclus headerul stdio.h pentru a putea folosi functiile getchar() si putchar(); Pe linia 3 incepe functia main; Pe linia 4 am declarat variabila a de tip char. Adica, variabila a va putea tine un cod ASCII; Pe linia 6 folosim functia getchar() pentru a citi un cod de la tastatura cod care il pune in variabila a. Pe linia 7 avem deja variabila a care are un anumit continut (dat de noi de la tastatura). Folosim functia putchar() pentru a afisa continutul variabilei. Pe linia 8 afisam caracterul newline ('n') strict din motive estetice  Pe linia 10 returnam 0 ca valoare de iesire pentru functia main() iar pe linia 11 se inchide acolada care marcheaza sfarsitul blocului main().
Simplu, nu ? Copiati codul, compilati-l si jucati-va putin cu el.
Vedeti ce se intampla daca in loc de
Code:
char a;
a = getchar();
putchar(a); |
puneti ceva de genul asta:
Functioneaza ? Daca da, incercati sa va dati seama de ce. Daca nu, la fel... incercati sa va dati seama de ce.
gets() Sa luam un text de 30 de caractere cu functia getchar() e destul de nasol. In libraria standard exista functia gets() care ne ajuta cu siruri de caractere. Apelul se face in felul urmator:
Code:
char sir[30];
gets(sir); |
unde sir poate contine maxim 30 de caractere (dupa cum e specificat). La apelul functiei gets() utilizatorul va introduce un sir de caractere iar programul va returna sirul cand utilizatorul va apasa tasta enter.
puts() Daca exista functie pentru citirea unui sir de caractere trebuie sa existe o functie si pentru afisarea acestuia. Functia puts primeste ca parametru un sir de caractere care il afiseaza pe ecran. Se foloseste de forma:
Code:
char sir[] = "Test";
puts(test); |
OK, haideti sa combinam cele doua functii si sa facem un programel mic. Sa folosim functia gets() pentru a va citi numele iar apoi functia puts() pentru a-l afisa. Codul va arata de forma:
Code:
#include <stdio.h>
int main(){
char nume[30];
puts("Care e numele tau?");
gets(nume);
puts(nume);
return 0;
} |
Ce face codul de mai sus ? Creaza o variabila nume care poate tine maxim 30 de caractere. Afiseaza "Care este numele tau?", asteapta sa introduceti un text care va fi salvat in variabila nume iar apoi afiseaza continutul variabilei nume. Faceti cateva teste si vedeti ce se intampla daca tastati mai mult de 30 de caractere. Modificati programul si jucati-va putin cu el.
printf() Probabil v-ati dat seama ca nu aveti flexibilitate cu functiile getchar(), putchar(), gets() si puts(). Poate ca doriti ca intr-o singura linie sa afisati mai multe date: caractere, numere intregi, numere reale etc. Pentru asta se foloseste functia printf() (printf formated). Functia ne permite sa afisam un text si sa controlam modul de afisare. printf() returneaza numarul de caractere afisate sau -1 in caz de eroare. Se foloseste in felul urmator:
Code:
printf(sir_de_control,parametrul1,parametrul1,...,parametrulN); |
unde sir_de_control este un camp text care contine caractere speciale de control despre care am vorbit si in lectia trecuta. La rulare se inlocuiesc in text caracterele speciale (specificatorii de format) cu valorile parametrilor dati functiei, parametrii ce corespund sirurilor de control. Probabil stiti deja cum se lucreaza cu functia din lectia anterioara asa ca ma rezum la un exemplu scurt:
Code:
printf("Acesta este un numar - %dn",53); |
Observati ca in sirul de control se pot pune si caractere speciale (newline - n, tab - t etc). Hai a refacem programul de mai sus folosind functia printf. Ar arata cam asa:
Code:
#include <stdio.h>
int main(){
char nume[30];
printf("Care e numele tau?");
gets(nume);
printf("Salut, %sn",nume);
return 0;
} |
Compilati-l si rulati-l. Alta viata, nu ?  Acum putem formula o propozitie cu variabila nume 
scanf() Prin analogia cu printf() va puteti da seama si ce face scanf(). Adica, citeste (scaneaza) ceva de la tastatura si returneaza in variabilele specificate. Functia are formatul:
Code:
scanf(sir_de_control,$parametrul1,parametrul2,...,parametrulN); |
Ce putem face cu scanf() ? Daca vrem sa citim un numar, putem folosi variabila scanf() in felul urmator:
astfel i-am "spus" functiei scanf() ca ii trimitem un numar intreg ( %d ) care trebuie sa-l stocheze la adresa variabilei i ( &i ). Observati ca s-a pus un & in fata lui i. Asta pentru ca scanf() asteapta o adresa la care sa puna variabila, nu o variabila. Momentan obisnuiti-va cu ideea. Cand ajungem la pointeri intelegeti mai bine ce e & sau * si la ce si cum se folosesc.
De asemenea, putem "scana" 2 sau mai multe variabile cu scanf() chiar si de tipuri diferite. Cum facem asta ? In felul urmator:
Code:
int a;
char nume[20];
scanf("%s %a",&nume, &a); |
Chestia de mai sus spune functiei scanf() ca utilizatorul va introduce o linie care va avea forma : un sir de caractere (spatiu) un numar ( de ex. 'test 5' ).
Haideti sa facem acum un program care cere numele si varsta pe o singura linie si apoi le afiseaza:
Code:
#include <stdio.h>
int main(){
char nume[30];
int varsta;
puts("Introdu numele si varsta pe o singura linie separate de spatiu!");
scanf("%s %d",&nume,&varsta);
printf("Salut, %s!. Stiu ca ai %d ani :Dn",nume,varsta);
return 0;
} |
NOTA - Specificatori de format Specificatorii de forumat sunt caracterele alea care le puneti in sirul de control al functiilor printf() sau scanf(). In functie de specificator functia stie ce tip de variabila trebuie sa puna la adresa specificata sau ce tip de variabila trebuie sa citeasca. Mai jos pun o lista a specificatorilor de format:
Code:
COD SEMNIFICATIE
%c - Caracter
%d - Intreg cu semn
%i - Intreg cu semn
%e - Afisare numere reale in format cu exponent
%E - Afisare numere reale in format cu exponent
%f - Afisare cu numere reale, simpla precizie, in format cu virgula
%g - Foloseste cel mai scurt format dintre %e si %f
%G - Foloseste cel mai scurt format dintre %E si %f
%o - Afisarea unui numar in octal
%s - Afisarea unui sir de caractere
%u - Afisare intreg fara semn
%x - Hexazecimal fara semn folosind litere mici
%X - Hexazecimal fara semn folosind litere mari
%p - Afisarea unui pointer
%n - Pointer intreg spre numarul de caractere afisate anterior
%% - Afisarea caracterului % |
Tema OK, haideti sa va dau si o tema daca tot suntem la scoala: Faceti si voi 2-3 programele simplute folosind functiile prezentate mai sus. Folositi-va imaginatia. Faceti ceva dragut. Astept sa vad ce ati lucrat.
_______________________________________ Portal SkullBox SkullBox Forum IP Finder and web browser details revealer
|
|