2.4. Functiile gets si puts
2019/01/01 in Programare in C
Functia gets poate fi folosita pentru a introduce de la terminalul standard o succesiune de caractere terminata prin actionarea tastei Enter.
Citirea se face cu ecou.
Functia are ca parametru adresa de inceput a zonei de memorie in care se pastreaza caracterele citite. De obicei, aceasta zona de memorie este alocata unui tablou unidimensional de tip char.
Deoarece numele de tablou are ca valoare adresa de inceput a zonei de memorie alocate, rezulta ca numele unui tablou poate fi utilizat ca parametru al functiei gets. In felul acesta caracterele citite se vor pastra in tabloul respectiv.
Functia gets returneaza adresa de inceput a zonei de memorie in care s-au pastrat caracterele.
La intalnirea sfarsitului de fisier se returneaza valoarea zero. Zero nu reprezinta o adresa posibila pentru gets si de aceea, ea poate fi folosita pentru a semnala sfarsitul de fisier. De obicei, valoarea returnata de gets nu se testeaza fata de zero, ci fata de constanta simbolica NULL definita in stdio.h.
Caracterul newline, care termina randul, nu se pastreaza in memorie. In locul lui se pastreaza caracterul NUL ('\0'). In felul acesta, caracterele citite prin gets formeaza un sir de caractere conform standardelor C si C++.
Secventa de caractere se termina prin caracterul NUL.
Astfel, daca tab este declarat prin:
char tab[255];
atunci apelul:
gets(tab);
pastreaza in tab succesiunea de caractere tastata la terminalul standard in linia curenta. Totodata, newline se inlocuieste cu NUL.
Functia puts afiseaza la terminalul standard un sir de caractere ale codului ASCII, dupa care cursorul trece automat in coloana intai de pe linia urmatoare.
Functia are ca parametru adresa de inceput a zonei de memorie care contine caracterele de afisat.
In cazul in care sirul de caractere care se afiseaza se pastreaza intr-un tablou unidimensional de tip char, drept parametru se poate folosi numele acestui tablou.
Functia puts returneaza codul ultimului caracter al sirului de caractere afisat (care precede caracterul NUL) sau -1 la eroare.
Daca tab are declaratia de mai sus si el pastreaza un sir de caractere, atunci apelul:
puts(tab);
afiseaza la terminalul standard sirul respectiv de caractere si apoi trece cursorul la coloana intai a liniei urmatoare.
Functiile gets si puts au prototipurile in fisierul stdio.h
Exercitii:
2.5. Sa se scrie un program care citeste la intrarea standard numele si prenumele unei persoane, afiseaza initialele persoanei respective pe un rand, fiecare initiala este urmata de un punct.
- Programul 009 - Nume si prenume
#include <stdio.h>
#include <conio.h>
main()
{
char nume[255];
char prenume[255];
gets(nume);
gets(prenume);
putchar('\n');
putchar(nume[0]);
putchar('.');
putchar(prenume[0]);
putchar('.');
}
2.6. Sa se modifice programul de mai sus asa incat dupa afisarea initialelor sa se afiseze textul: Pentru a termina actionati o tasta.
Acest text se poate afisa folosind functia puts, apelata inainte de apelul lui getch:
puts("Pentru a termina actionati o tasta");
In acest exemplu, parametrul efectiv este o expresie redusa la un operand care este o constanta sir.
La acest apel compilatorul pastreaza caracterele respective intr-o zona de memorie si apoi realizeaza apelul functiei puts folosind adresa de inceput a zonei respective.
- Programul 010 - Nume si prenume cu gets si puts
#include <stdio.h>
#include <conio.h>
main()
{
char nume[255];
char prenume[255];
gets(nume);
gets(prenume);
putchar('\n');
putchar(nume[0]);
putchar('.');
putchar(prenume[0]);
putchar('.');
puts("\nPentru a termina actionati o tasta");
getch();
}