CATEGORII DOCUMENTE |
DOCUMENTE SIMILARE |
|
TERMENI importanti pentru acest document |
|
Operatii I/O relativ la perifericele standard
Ne propunem in acest modul sa prezentam functiile C care fac parte din sistemul I/O referitor la efectuarea operatiilor de introducere a datelor de la tastatura si afisare a acestora pe ecranul monitorului.
1 Operatii la nivel de caracter
Cele mai simple functii C pentru lucrul la nivel de caracter relativ la perifericele standard au urmatoarele prototipuri:
int getch (void);
int getche (void);
int putchar (int car);
Functia getch() este utilizata pentru a citi un caracter de la tastatura fara ecou pe ecranul monitorului , analog mecanismului readkey din Pascal.
Functia getche() este utilizata pentru a citi un caracter de la tastatura cu ecou pe ecranul monitorului.
Functia putchar() se foloseste pentru a scrie un caracter pe ecranul monitorului in pozitia curenta a cursorului.
Dupa cum sugereaza prototipul, getch() returneaza un intreg. Totusi, functia poate returna aceasta valoare unei variabile de tip caracter deoarece caracterul este continut in octetul de ordin inferior.
Aceeasi observatie este valabila si pentru functia getche().
Desi din alt punct de vedere, si functia putchar() poate fi apelata cu argument de tip caracter deoarece iesirea pe ecran se refera, oricum, doar la octetul de ordin inferior.
In cazul aparitiei unei erori, putchar() returneaza EOF. Functia macro EOF, este definita in stdio.h si, in general este egala cu -1. Exemplul pe care il prezentam permite citirea de caractere de la tastatura si, daca sunt litere mici, convertirea lor la litere mari. Citirea se termina in momentul in care se tasteaza caracterul ESC al carui cod backslash este 033.
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
void main
while (car!='033');
Prototipul functiei toupper() se afla (asa cum am mai spus-o) in fisierul antet ctype.h. Se observa ca citirea se face cu ecou pe ecranul monitorului. Este cazul sa spunem ca programatorul in C/C++ are de facut o serie de descoperiri folositoare in ceea ce priveste oferta numeroaselor fisiere antet livrate odata cu compilatorul. Prezentarea tuturor acestor functii, fie si numai prina antet, nu este de loc o treaba usoara, din punct de vedere al volumului. De aceea. in acest suport de curs adresam cititorului invitatia de a descoperi, cu ajutorul help-ului on line si a unor carti care nu fac economie de spatiu, potentialul structurat in fisierele antet.
2 Operatii la nivel de sir de caractere
Pentru operatii la nivel de sir de caractere C pune la dispozitie functiile avand urmatoarele prototipuri:
char *gets(char *sir);
int puts(const char *sir);
Functia gets() citeste un sir de caractere de la tastatura si il plaseaza la adresa indicata de argumentul sau.
Functia puts() scrie pe ecran argumentul sau, urmat de o linie noua.
Prototipurile acestor doua functii se gasesc in stdio.h.
Exemplul care urmeaza arata modul de utilizare al functiilor gets() si puts() cand argumentul lui gets() este o variabila obisnuita.
#include <stdio.h>
#include <conio.h>
void main
In exemplul de mai jos se arata modul de utilizare al functiilor gets() si puts() cand argumentul lui gets() este o variabila pointer la un sir de caractere.
#include <stdio.h>
#include <conio.h>
void main()
Operatii I/O cu siruri de caractere se pot efectua si cu functiile scanf() si printf(), mult mai versatile decat gets() si puts() , dupa cum vom vedea in continuare.
3 Functii I/O relativ la consola formatate
Functiile printf() si scanf() efectueaza operatii I/O formatate, adica pot scrie si, respectiv, citi date in diverse formate specificate de programator. Functia printf() afiseaza date formatate la consola. Functia scanf(), complementul functiei printf() citeste date formatate de la tastatura. Ambele functii pot lucra cu toate tipurile de date existente in C. Prototipurile celor doua functii sunt:
int scanf( const char *format [, address, ]);
int printf(const char *format [, argument, ..]);
printf()
Returneaza, cu destinatia ecran, numarul de caractere scrise sau, daca apare o eroare, o valoare negativa. Parametrul format se compune din doua tipuri de simboluri. Primul tip il formeaza caracterele care vor fi afisate pe ecran. Al doilea tip se refera la specificatorii de format cu ajutorul carora se stabileste modul in care sunt afisate argumentele care urmeaza. Un specificator de format incepe cu un semn % si este urmat de un cod de format. Trebuie sa existe acelasi numar de argumente ca si acela al specificatorilor de format si, totodata, specificatorii de format si argumentele se asociaza in ordinea de la stanga la dreapta.
Codurile de format disponibile pentru printf() sunt:
Cod |
Format |
%c |
Caracter |
%d |
Numere intregi in baza 10, cu semn |
%I |
Numere intregi in baza 10, cu semn |
%e |
Notatie stiintifica (cu litera e) |
%E |
Notatie stiintifica (cu litera E) |
%f |
Numar zecimal in virgula mobila |
%g |
Foloseste %e sau %f , anume, care din ele este mai mic |
%G |
Foloseste %E sau %f , anume, care din ele este mai mic |
%o |
Numar in octal, fara semn |
%s |
Sir de caractere |
%u |
Numere intregi zecimale fara semn |
%x |
Numere hexazecimale fara semn (cu litere mici) |
%X |
Numere hexazecimale, fara semn, cu litere mari |
%p |
Afiseaza un pointer |
%n |
Argumentul asociat este un pointer de tip intreg in care a fost plasat numarul de caractere scrise pana atunci. |
Afiseaza un semn % |
Pentru a intelege modul deosebit in care actioneaza codul %n urmariti exemplul de mai jos.
#include <stdio.h>
#include <conio.h>
void main
De remarcat faptul ca specificatorii de format accepta modelatori de format care modifica usor semnifictia lor. De exemplu, se poate specifica un minim de caractere permise la afisare, numarul de cifre zecimale si alinierea la stanga. Modelatorul de format se afla intre semnul % si codul pentru format. Codul de mai jos poate forma o idee asupra utilitatii modelatorilor de format.
#include <stdio.h>
#include <conio.h>
void main
scanf()
Este o rutina de uz general pentru intrari de la consola. Ea poate sa citeasca toate tipurile de date incorporate si sa faca automat conversia numerelor in format intern corect. Se aseamana mult cu complementara ei printf(). Ca functie, scanf() returneaza numarul de elemente carora li s-a atribuit cu succes o valoare. Daca apare o eroare scanf() returneaza EOF. Argumentul format determina modul in care vor fi citite valorile in variabilele din lista de argumente. Codurile de format disponibile pentru scanf() sunt prezentate in tabelul de mai jos.
Cod |
Format |
%c |
Citeste un singur caracter |
%d |
Citeste un numar intreg in baza 10 |
%I |
Citeste un numar intreg in baza 10 |
%e |
Citeste un numar in virgula mobila |
%E |
Citeste un numar in virgula mobila |
%f |
Citeste un numar in virgula mobila |
%g |
Citeste un numar in virgula mobila |
%o |
Citeste un numar in octal |
%s |
Citeste un sir de caractere |
%u |
Numere intregi zecimale fara semn |
%x |
Citeste un numar in hexazecimal |
%p |
Citeste un pointer |
%n |
Argumentul asociat este un pointer de tip intreg in care a fost plasat numarul de caractere citite pana atunci. |
%u |
Citeste un intreg fara semn |
Cauta un set de caractere |
Tabelul 10. O parte din codurile pentru formatarea operatiilor I/I relativ la periferice standard
Primul exemplu de cod prezentat mai jos ilustreaza ideea de scanset posibila la utilizarea functiei scanf(). Definirea unui scanset inseamna, de fapt ca citirea corespunzatoare unei variabile este validata cat timp caracterele citite se potrivesc celor definite in scanset.
Al doilea exemplu este conceput in ideea ca valoarea variabilei n2 va fi citita numai dupa introducerea de la tastatura a doua caractere virgula. Acest mecanism permite, printre altele, definirea ca separator la introducerea datelor a altui caracter decat <CR>.
#include <stdio.h>
#include <conio.h>
void main
#include <stdio.h>
#include <conio.h>
void main
Atentie la necesitatea ca variabila in care se citeste sa fie un pointer!
Alte facilitati pentru lucrul cu consola
In categoria "alte facilitati pentru lucrul cu consola" includem, cu prioritate, functiile clrscr(), clreol(), gotoxy(col,lin) ale caror valori de intrebuintare sunt identice celor din Borland Pascal. Chiar si sintaxa functiei gotoxy(col,lin) este concordanta in ceea ce priveste ordinea parametrilor dupa care se face pozitionarea cursorului.
Asadar:
clrscr() - se utilizeaza pentru steregerea ferestrei text curente; fereastra text curenta implicita depinde de modul text in care se lucreaza. Caracteristicile modurilor text recunoscute de C sunt prezentate in tabelul de mai jos.
|
Valoare |
Mod Text |
Caracterisrici |
LASTMODE |
Precedentul mod text | ||
BW40 |
Black and white |
40 coloane |
|
C40 |
Color |
40 coloane |
|
BW80 |
Black and white |
80 coloane |
|
C80 |
Color |
80 coloane |
|
MONO |
Monochrome |
80 coloane |
|
C4350 |
EGA and VGA |
50 linii |
Tabelul 11. Moduri video text standard
Aceste moduri text pot fi selectate cu ajutorul functiei textmode(), al carei antet se afla tot in conio.h si face parte tot din arsenalul C de lucru cu ecranul in mod text. Tot in mod text, putem controla culorile textului si ale fondului (background-ul). Sintaxa functiilor cu care realizam controlul culorilor este:
textcolor(<Culoare>);
textbackground(<Culoare>);
Parametrul <Culoare> poate lua una din valorile prezentate in tabelul de mai jos:
|
Valoare |
Fond |
Text |
BLACK |
Da |
Da |
|
BLUE |
Da |
Da |
|
GREEN |
Da |
Da |
|
CYAN |
Da |
Da |
|
RED |
Da |
Da |
|
MAGENTA |
Da |
Da |
|
BROWN |
Da |
Da |
|
LIGHTGRAY |
Da |
Da |
|
DARKGRAY |
Da |
Da |
|
LIGHTBLUE |
Nu |
Da |
|
LIGHTGREEN |
Nu |
Da |
|
LIGHTCYAN |
Nu |
Da |
|
LIGHTRED |
Nu |
Da |
|
LIGHTMAGENTA |
Nu |
Da |
|
YYELLOW |
Nu |
Da |
|
WHITE |
Nu |
Da |
|
BLINK |
Nu |
Tabelul 12. Valori admise pentru culoare text si fond. Moduri video text standard
*** Codul BLINK se adauga la culoarea textului pentru a obtine efectul de blinking.
clreol() - se utilizeaza pentru stergerea liniei curente incepand cu coloana pe care se afla cursorul si pana la sfarsitul liniei.
gotoxy(col,lin) - permite pozitionarea cursorului pe linia si coloana specificate.
De asemenea, pot fi de interes, in anumite situatii, urmatoarele functii:
window(css,lss,cdj,ldj);
Defineste coordonatele ferestrei text active.
wherex()
Returneaza coloana curenta a cursorului.
wherey()
Returneaza linia curenta a cursorului.
gettext() si puttext()
Permit citirea/scrierea memoriei video in mod text, ca in exemplul de mai jos.
#include <conio.h>
//Buffer pentru salvat continut memorie-video
char buffer[4096];
int main(void)
Ca o aplicatie la cele prezentate pana in acest moment in legatura cu programarea in C, prezentam codul care incapsuleaza cateva noi facilitati de lucru in mod text, sub forma unui fisier antet, care poate fi utilizat in orice program C, daca este prezenta directiva de compilare:
#Include "facilcrt.h"
Numele fisierului antet este, evident, facilcrt.h.
#include <conio.h>
#include <stdio.h>
#include <string.h>
//Activare video-invers
void avideo()
//dezactivare video-invers
void dvideo()
//Afisare centrata text in interiorul unei linii
void acentext(int ls,int ld,int linia,char *sir)
//Construire fereastra cu rama dreptunghiulara de dimensiuni specificate
void makewin2(int ass,int oss,int adj,int odj)
for(i=oss;i<=odj;i++)
gotoxy(ass-1,oss-1);cprintf('311');
gotoxy(adj+1,oss-1);cprintf('273');
gotoxy(ass-1,odj+1);cprintf('310');
gotoxy(adj+1,odj+1);cprintf('274');
else
Ca un comentariu la exemplul de cod C prezentat mai sus si la alte exemple prezentate deja, facem precizarea ca directiva de includere #include este solutia C pentru o modularizare a codului, orientata pe clasificarea tipurilor de capabilitati de prelucrare in fisiere speciale numite fisiere antet. Fisierele antet sunt incluse in codurile sursa ale programelor noastre de cate ori avem nevoie de o capabilitate al carei prototip se afla in acele fisiere antet.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 806
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved