Академический Документы
Профессиональный Документы
Культура Документы
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3-2
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3-3
cin e cout
As streams cin e cout tornam-se a interface entre o programa e o utilizador, para interactuar com o keyboard e com o ecr. O stream cin criado automaticamente quando se inclui o ficheiro header <iostream.h> ficando associado ao keyboard do terminal.
O stream cout criado automaticamente quando se inclui o ficheiro header <iostream.h> ficando associado ao ecr do terminal
extern istream cin; extern ostream cout;
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3-4
stream cout
1 converter o inteiro 27 nos caracteres '2','7' e coloc-los no buffer 2 colocar o caracter "mudana de linha no buffer".
27
buffer
'2' '7' '\n' . . .
27 _
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3-5
O operador insersor <<, retorna uma referncia para o ostream sobre o qual operou, pelo que se podem concatenar inseres numa mesma expresso.
void main() int i= 10, double d= 3.1456; cout << "i =" << i << ", d=" << d << endl; /* Equivalente a: cout << "i =; // insere a string "i =" cout << i; // insere o valor inteiro de i cout << ", d=" ; // insere a string cout << d; // insere o valor real de d cout << endl; // insere o caracteres \r\n e //faz flush do buffer. } */
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3-6
stream cin
buffer
2 ' ' '0' '0' '2' '7' ' ' ' ' 'x' 'p' 't' 'o' '\n' Digitou-se: " 0027 xpto<Return>"
27
ignorou-se os espaos e leu-se as letras 'x','p','t','o' para o array colocando um <zero> a seguir ao 'o' para terminar a string.
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3-7
O operando direito pode ser qualquer dos tipos intrnseco do C++, pois em <iostream.h> esto definidos vrias verses do operador insersor .
Por omisso, salta espaos em branco (como definido na funo isspace() em <ctype.h>), lendo seguidamente os caracteres adequados ao tipo de objecto que vai ser afectado.
cout << "c = " << c << endl << "i = " << i << endl << "f = << f << endl << "str = " << str << endl;
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3-8
putback
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3-9
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 10
int int int int int int int int int int int int
isdigit(char) islower(char) isupper(char) isalpha(char) isalnum(char) isxdigit(char) isascii(char) iscntrl(char) isgraph(char) isprint(char) ispunct(char) isspace(char)
// '0' .. '9' // 'a' .. 'z // 'A' .. 'Z' // islower() | isupper() // isalpha() | isdigit() // '0' .. '9' 'a' .. 'f' 'A' .. 'F' // 0 .. 0x7F //caracteres de control //isalpha() | isdigit() | ispunct () // printable: ascii entre ' ' e '~' // pontuao // ' ' '\t' CR LF
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 11
Manipuladores
Manipulador In Out Definio
Existem manipuladores para streams, de entrada (mudam o formato das extraces) e/ou de sada (mudam o formato das inseres)
v Mudar de linha e flush do ostream. v Inserir \0 para terminar string. v Esvaziar (flush) o buffer do ostream. v Converso para base decimal. v Converso para base hexadecimal. v Converso para base octal. Eliminar caracteres separadores. v Fixar a base de converso em b. v Desactivar bit-vector flags de acordo com b. Ver v Activar os bit-vector flags de acordo com b. Ver v Definir o carcter de preenchimento de espaos do campo com (char)f v Situar em n dgitos a preciso de um floatingpoint. v v Colocar em n caracteres a largura do campo.
ws setbase(int b)
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 12
Manipuladores - exemplo
#include<iostream.h> #include<iomanip.h> #include<conio.h> void main() { clrscr(); int i=123; double d=12345.6789; char *s= "blabla"; cout << setw(10) << s << endl << i << endl << setw(10) << i << endl << d << endl << setw(15) << setfill('*') << d << endl << setw(13) << setfill(' ') << setprecision(3) << setiosflags(ios::left) << d << s << endl; }
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 13
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 14
Acesso a ficheiros
Podem ser definidos objectos associados a ficheiros, e passar a interactuar com esses objectos com os mesmos operadores, mtodos e manipuladores que se utilizam para cin e cout. Existem vrios objectos que podemos criar para ter acesso a ficheiros:
ifstream - quando queremos abrir um ficheiro para leitura. ofstream - quando queremos abrir um ficheiro para escrtita. fstream - quando se deseja que o ficheiro possa ser lido e escrito.
Para criar qualquer um dos tipos de objectos anteriores, teremos de explicitamente proceder aos vrios passos da definio, que nos so ocultos no caso de cin e cout.
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 15
Equivale a:
ifstream is(c:\mensage\text1.doc);
Equivale a:
ofstream os(c:\mensage\text2.doc);
O mtodo close() garante: que toda a informao situada no buffer transferida para ficheiro em disco, e que as estruturas de dados inerentes organizao do disco sejam devidamente actualizadas.
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 16
ifstream input("file.txt") ; if (!input) { cout << "Sarilhos " << endl; exit(0); }
#include<fstream.h> #include<iostream.h> #include <stdlib.h> void main() { char ch; ifstream f1("file.in"); if (!f1) { // Teste ao estado da fstream input cout << "Cannot open 'file.in' for input" << endl; exit(0); } ofstream f2("file.out"); if (!f2) { // Teste ao estado da fstream de output cout << "Cannot open 'file.out' for output" << endl; exit(0); } while ( f1.get(ch) ) f2.put(ch); f1.close(); f2.close(); cin.get(); }
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 17
Aco
A p p e n d d a t a - E s c r e v e n o f im d o f ic h e ir o P o s ic io n a - s e n o f im d o f ic h e ir o in ic ia lm e n t e A b r e o f ic h e ir o p a r a le it u r a A b r e o f ic h e ir o p a r a e s c r it a A b r e o f ic h e ir o e m m o d o b in r io D e s p r e z a o a n t e r io r c o n t e d o d o f ic h e ir o . F a lh a a a c o s e n o e x is t ir o f ic h e ir o S e o f ic h e ir o e x is t ir , f a lh a a b e r t u r a ( o p e n ) p a r a s a d a , a m e n o s q u e a t e o u a p p e s t e j a m a c t iv a s .
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 18
3-10
Todos os operadores, funes e manipuladores usados para de cin e cout, podem, sem nenhuma alterao sintctica, ser aplicados a ficheiros abertos em modo de texto para leitura ou para escrita. Os ficheiros prestam-se a aces que no so comuns utilizar sobre o teclado e ecr. Nomeadamente o acesso aleatrio ou o posicionamento especificado. Os operadores insersores e extractores esto vocacionadas para ficheiros de texto.
3 - 19
ifstream in ("t1.doc"); // fstream in("t1.doc", ios::in); ofstream out("t2.doc"); // fstrteam out(t2.doc, ios::out | ios::trunc); Abertura de ficheiros em modo binrio Abertura para leitura e escrita com fstreams
fstream inOut("t1.doc", ios:in | ios::out); // texto fstream inOut("t1.doc", ios:in | ios::out | ios::binary);// binrio
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 20
// fich. texto com escrita no fim ofstream out("t1.doc", ios:app); // fich. binrio com escrita no fim ofstream out("t1.doc", ios:app | ios::binary); // fich. texto com posicionamento no fim e com possibilidade de acesso directo ofstream out ("t1.doc", ios:ate); // fich. binrio com posicionamento no fim e com possibilidade de acesso directo ofstream out ("t1.doc", ios:ate | ios::binary);
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 21
Mtodo write()
write
ostream& write(const char* ptr, int n); ostream& write(const signed char* ptr, int n); ostream& write(const unsigned char* ptr,int n);
Insere no stream n caracteres. Se o ficheiro for de texto virtualiza o caracter '\n' , num par ('\r', '\n'). vocacionada para registar estruturas de dados em ficheiros binrios, embora possa ser usada em ostream na generalidade.
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 22
Mtodo read()
read
ostream& read(char* ptr, int n); ostream& read(signed char* ptr, int n); ostream& read(unsigned char* ptr, int n); Teste do mtodo read()
O mtodo read() vocacionada para a leitura de estruturas de dados de ficheiros binrios, embora possa ser usada noutro tipo de istreams.
#include <iostream.h> #include <fstream.h> void main() { struct { double salary; char name[23]; } employee; ifstream is( "payroll", ios::binary | ios::nocreate ); if( is ) { // ios::operator void*()
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 23
O ficheiro criado pode ser utilizado para virtualizar em disco um array com acesso por ndice para ler e escrever em qualquer dos seus elementos. O mtodo seekg(long n), posiciona no byte n (a contar do inicio do ficheiro), o que permite alterar o acesso ao ficheiro para aces de leitura (get). O mtodo seekp(long n), posiciona no byte n para escrita(put), o que permite alterar o acesso ao ficheiro para aces de escrita.
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 24
#include <iostream.h>
#include <iomanip.h> fstream farray("intArray", ios:: in | ios::out| ios::binary); const int NUMINT = 100; void main() { for (int i = 0; i < NUMINT; ++i) farray.write((char *) &i, sizeof(int));// escreve
for (int begin = 0, end = NUMINT -1; begin < NUMINT/2; ++begin, --end )
int auxBegin, auxEnd; farray.seekg(begin * sizeof(int)); farray.seekg(end * sizeof(int)); farray.seekp(begin * sizeof(int)); farray.seekp(end * sizeof(int)); } } // l o inteiro cuja posio begin // l o inteiro cuja posicao end farray.read((char *) &auxBegin, sizeof(int)); farray.read((char *) &auxEnd, sizeof(int));
// escreve o valor do auxEnd inteiro na posio begin // escreve o valor do auxBegin inteiro na posicao end
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 25
Hierarquia iostream
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 26
As primitivas de I/O comunicam directamente com o dispositivo fsico (contrariamente s streams). Estas primitivas no constam nas bibliotecas standard do C++, no entanto so necessrias em algumas aplicaes :
Recolha directa de caracteres sem edio de linha, ou seja, sem ser necessrio aguardar a actuao da tecla <ENTER> ou <RETURN> para que o carcter fique disponvel. Recolha de caracteres com ou sem eco no ecr. Obter informao do teclado acerca da existncia ou no de caracteres j disponveis para recolha, permitindo realizar outras operaes enquanto os caracteres no estejam disponveis.
Em PCs as declaraes das aces directas sobre o terminal (consola) esto disponveis no ficheiro <conio.h>
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 27
Funo getch()
int getch( )
Recolhe caracteres do teclado sem a actuao da tecla <ENTER> e sem eco Devolve o cdigo da tecla premida As teclas de aco (F1 a F12, Insert, Home, , , , , etc.), geram dois cdigos:
1: Sem significado (0, 224, etc). 2: Cdigo especfico da tecla. Para recolher informao sobre estas teclas necessrio evocar a funo por duas vezes.
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
#include <iostream.h> #include <ctype.h> #include <conio.h> void main() { unsigned char ch; // unsigned para codigo > 127 do { cout << "\nPrima uma tecla (terminar '*')" << endl; ch = (unsigned char)getch(); // Testar se o primeiro cdigo de aco. O primeiro // cdigo pode ser 0 ou 224. if( ch==0 || ch==224 ) cout << "Tecla de accao com codigo " << (unsigned int) getch() << endl; else { cout << "A tecla nao e de accao"; if ( isprint(ch) ) cout << ", corresponde ao caracter " << ch; cout << ", tem o codigo " << (unsigned) ch << endl; } } while ( ch != '*' ); }
3 - 28
Funo getche()
getche( )
Ler teclas e escrever o correspondente cdigo.
#include <iostream.h> #include <conio.h> void main() { int ch; do { cout << "Prima uma tecla alfanumerica - " << flush; ch = getche(); cout << "\nTecla com o codigo ASCII " << ch << endl; } while ( ch != '*' ); }
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 29
Funo putch()
putch(char ch)
#include <conio.h> #include <ctype.h> void main() { char ch; do { putch( toupper( ch = (char) getch() ) ); if (ch == '\r') putch('\n'); } while (ch != '*'); }
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 30
Funo kbhit()
Int kbhit ( )
Testa se uma tecla foi ou no actuada.
Faz uma espera activa, escrevendo caracteres . enquanto no for premida uma tecla.
#include <iostream.h> #include <conio.h> #include <ctype.h> void main(){ do { while( ! kbhit() ) putch('.'); getch();
cout << "\nQuer continuar (S/N)? " << flush; } } while( toupper(getch()) == 'S' );
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 31
Manipulao de strings
O ficheiro <string.h> dispe da declarao dos prottipos das funes de manipulao de strings. int strlen(char *str);
Recebe uma string como parmetro e devolve a sua dimenso.
Programao em C++
Pimenta Rodrigues Pedro Pereira Manuela Sousa
3 - 32