·

Engenharia Elétrica ·

Linguagens de Programação

Envie sua pergunta para a IA e receba a resposta na hora

Fazer Pergunta

Texto de pré-visualização

Entradasaıda de fluxo Tecnicas e Linguagens de Programacao Paulo Bentes UFPAITECFEEB June 8 2021 Entradasaıda de fluxo Sumario Sumario 1 Fluxos 2 Aliase 3 Classes de entradasaıda de fluxo e objetos 4 Saıda de fluxo 5 Entrada de fluxo 6 ES nao formatada utilizando read write e gcount 7 Estados de erro de fluxo 8 Exercıcio 9 Referˆencias Entradasaıda de fluxo Fluxos Fluxos Fluxos A ES no C ocorre em fluxos que sao sequˆencias de bytes Nas operacoes de entrada os bytes fluem de um dispositivo por exemplo teclado unidade de disco conexao de rede para a memoria principal Nas operacoes de saıda os bytes fluem da memoria principal para um dispositivo por exemplo monitor impressora unidade de disco conexao de rede etc Entradasaıda de fluxo Fluxos Fluxos Cont O C fornece capacidades de ES tanto de baixo nıvel como de alto nıvel As capacidades de ES de baixo nıvel isto e ES nao formatada especificam que um numero de bytes deve ser transferido do dispositivo para a memoria ou da memoria para o dispositivo Nessas transferˆencias o byte individual e o item de interesse Essas capacidades de baixo nıvel fornecem transferˆencias de alta velocidade e alto volume mas nao sao particularmente convenientes aos programadores Os programadores geralmente preferem uma visao de nıvel mais alto de ES isto e ES formatada em que os bytes sao agrupados em unidades significativas como inteiros numeros de ponto flutuante caracteres strings e tipos definidos pelo usuario Essas capacidades orientadas a tipos sao satisfatorias para a maior parte da ES nao relacionada com o processamento de arquivo de alto volume Entradasaıda de fluxo Fluxos Fluxos Cont2 Arquivos de cabecalho da biblioteca iostream A maioria dos programas C inclui o arquivo de cabecalho iostream que declara servicos basicos requeridos por todas as operacoes de ES de fluxo O arquivo de cabecalho iostream define os objetos cin cout cerr e clog que correspondem ao fluxo de entradapadrao ao fluxo de saıdapadrao ao fluxo de erropadrao nao armazenado em buffer e ao fluxo de erro armazenado em buffer respectivamente O cabecalho iomanip declara servicos uteis para realizar ES formatada com os chamados manipuladores de fluxo parametrizados como setw e setprecision e o cabecalho fstream declara servicos para processamento de arquivo controlado pelo usuario Entradasaıda de fluxo Aliase Aliase O especificador typedef declara sinˆonimos aliases dos tipos de dados anteriormente definidos As vezes os programadores usam o typedef para criar nomes de tipo mais curtos ou mais legıveis Ex typedef Card CardPtr No exemplo a instrucao typedef define um nome de tipo adicional CardPtr como um sinˆonimo do tipo Card Entradasaıda de fluxo Classes de entradasaıda de fluxo e objetos Classes de entradasaıda de fluxo e objetos A biblioteca iostream fornece muitos templates para tratar operacoes comuns de ES Por exemplo o template de classe basic istream suporta operacoes de entrada de fluxo o template da classe basic ostream suporta operacoes de saıda de fluxo e o template da classe basic iostream suporta tanto operacoes de entrada de fluxo como de saıda O typedef istream representa uma especializacao de basic istream que permite a entrada de char Semelhantemente o typedef ostream representa uma especializacao de basic ostream que permite a saıda de char O typedef iostream tambem representa uma especializacao de basic iostream que permite tanto a entrada como a saıda de char Entradasaıda de fluxo Classes de entradasaıda de fluxo e objetos Classes de entradasaıda de fluxo e objetos Cont Objetos de fluxo padrao cin cout cerr e clog A sobrecarga de operadores fornece uma notacao conveniente para realizar entradasaıda O operador de deslocamento para a esquerda e sobrecarregado para designar a saıda de fluxo e e referido como operador de insercao de fluxo O operador de deslocamento para a direita e sobrecarregado para designar a entrada de fluxo e e referido como operador de extracao de fluxo Entradasaıda de fluxo Classes de entradasaıda de fluxo e objetos Classes de entradasaıda de fluxo e objetos Cont2 O objeto predefinido cin e uma instˆancia istream e dizemos que ele esta conectado ou anexado ao dispositivo de entradapadrao que normalmente e o teclado O objeto predefinido cout e uma instˆancia ostream e dizse que ele esta conectado ao dispositivo de saıdapadrao que normalmente e a tela do vıdeo Entradasaıda de fluxo Classes de entradasaıda de fluxo e objetos Classes de entradasaıda de fluxo e objetos Cont3 O objeto predefinido cerr e uma instˆancia ostream e dizse que esta conectado ao dispositivo de erropadrao As saıdas para o objeto cerr sao nao armazenadas em buffer o que implica que cada insercao de fluxo para cerr faz com que sua saıda apareca imediatamente isso e apropriado para notificar prontamente o usuario dos erros O objeto predefinido clog e uma instˆancia da classe ostream e diz se que ele esta conectado ao dispositivo de erropadrao As saıdas para clog sao armazenadas em buffer Isso significa que cada insercao em clog poderia fazer com que sua saıda ficasse presa a um buffer ate que este fosse preenchido ou esvaziado Entradasaıda de fluxo Classes de entradasaıda de fluxo e objetos Classes de entradasaıda de fluxo e objetos Cont4 Templates de processamento de arquivo O processamento de arquivo C utiliza templates da classe basic ifstream para entrada de arquivo basic ofstream para saıda de arquivo e basic fstream para entrada e saıda de arquivo Cada template de classe tem uma especializacao de template predefinida que permite a ES de char O C fornece um conjunto de typedefs que fornece aliases para essas especializacoes de template Por exemplo o typedef ifstream representa uma especializacao de basic ifstream que permite a entrada de char a partir de um arquivo De modo semelhante typedef ofstream representa uma especializacao de basic ofstream que permite a saıda de char para um arquivo Alem disso typedef fstream representa uma especializacao de basic fstream que permite a entrada e a saıda de char de e para um arquivo Entradasaıda de fluxo Classes de entradasaıda de fluxo e objetos Classes de entradasaıda de fluxo e objetos Cont5 Figure 1 Parte da hierarquia de template de ES de fluxo mostrando os principais templates de processamento de arquivo Entradasaıda de fluxo Saıda de fluxo Saıda de fluxo Saıda de variaveis char Apesar desta variavel constituir um ponteiro o C vai determinar o tipos de dados automaticamente e atribuılo a um array do tipo char Para fazer com que a saıda represente um ponteiro a solucao e fazer coercao do char em um void conforme colocado no exemplo de Fig15 03cpp Saıda de caractere utilizando a funcaomembro put Podemos utilizar a funcaomembro put para gerar a saıda de caracteres Por exemplo a instrucao coutput A exibe um unico caractere A As chamadas para put podem ser em cascata como na instrucao coutput A put Entradasaıda de fluxo Saıda de fluxo Saıda de fluxo Cont Ex Imprimindo o endereco armazenado em uma variavel char Arquivo Fig15 03cpp include iostream using stdcout using stdendl int main char word again exibe o valor de char e entao o valor de char static cast para void cout Value of word is word endl Value of static cast void wordis static cast void word endl return 0 fim de main Entradasaıda de fluxo Entrada de fluxo Entrada de fluxo Funcaomembro get A funcaomembro get sem argumentos insere um caractere a partir do fluxo designado incluindo caracteres de espaco em branco e outros caracteres nao graficos como a sequˆenciachave que representa o fim do arquivo e o retorna como o valor da chamada de funcao Essa versao de get retorna EOF quando o fim do arquivo e encontrado no fluxo Utilizando as funcoesmembro eof get e put No exemplo apresentado em Fig15 04cpp o programa primeiro imprime o valor de cineof isto e false 0 na saıda para mostrar que o fim do arquivo nao ocorreu em cin O usuario insere uma linha de texto e pressiona Enter seguido do fim do arquivo ctrlz em sistemas Microsoft Windows ctrld em sistemas UNIX Entradasaıda de fluxo Entrada de fluxo Entrada de fluxo Cont Ex Utilizando funcoesmembro get put e eof Arquivo Fig15 04cpp include iostream using stdcin using stdcout using stdendl int main int character utiliza int porque char nao pode representar EOF solicita para o usuario inserir linha de texto cout Before input cineof is cineof endl Enter a sentence followed by end of file endl Entradasaıda de fluxo Entrada de fluxo Entrada de fluxo Cont2 utiliza get para ler cada caractere utiliza put para exibilos while character cinget EOF coutput character exibe caractere de fim do arquivo cout EOF in this system is character endl cout After input of EOF cineof is cineof endl return 0 fim de main Entradasaıda de fluxo Entrada de fluxo Entrada de fluxo Cont3 Comparacao entre cin e cinget A entrada usando extracao de fluxo com cin lˆe caracteres ate um caractere de espaco em branco ser encontrado enquanto a entrada usando cinget nao especifica um delimitador entao o caractere padrao e utilizado Utilizando a funcaomembro getline A funcaomembro getline insere um caractere nulo depois da linha no array de caracteres A funcao getline remove o delimitador do fluxo isto e lˆe o caractere e o descarta mas nao o armazena no array de caracteres Entradasaıda de fluxo Entrada de fluxo Entrada de fluxo Cont4 Ex Contrastando a entrada de uma string via cin e cinget Arquivo Fig15 05cpp include iostream using stdcin using stdcout using stdendl int main cria dois arrays de char cada um com 80 elementos const int SIZE 80 char buffer1 SIZE char buffer2 SIZE Entradasaıda de fluxo Entrada de fluxo Entrada de fluxo Cont5 utiliza cin para inserir caracteres em buffer1 cout Enter a sentence endl cin buffer1 exibe o conteudo de buffer1 cout The string read with cin was endl buffer1 endl endl usa cinget para inserir caracteres em buffer2 cinget buffer2 SIZE exibe o conteudo buffer2 cout The string read with cinget was endl buffer2 endl return 0 fim de main Entradasaıda de fluxo Entrada de fluxo Entrada de fluxo Cont6 Ex Inserindo caracteres utilizando a funcaomembro cin getline Arquivo Fig15 06cpp include iostream using stdcin using stdcout using stdendl int main const int SIZE 80 char buffer SIZE cria array de 80 caracteres Entradasaıda de fluxo Entrada de fluxo Entrada de fluxo Cont7 insere caracteres no buffer via funcao cin getline cout Enter a sentence endl cingetline buffer SIZE exibe o conteudo do buffer cout The sentence entered is endl buffer endl return 0 fim de main Entradasaıda de fluxo ES nao formatada utilizando read write e gcount ES nao formatada utilizando read write e gcount ES nao formatada A entradasaıda nao formatada e realizada utilizando as funcoes membro read e write de istream e ostream respectivamente A funcaomembro read lˆe algum numero de bytes em um array de caracteres na memoria a funcaomembro write gera uma saıda de bytes de um array de caracteresA funcaomembro gcount informa o numero de caracteres lidos pela ultima operacao de entrada Entradasaıda de fluxo ES nao formatada utilizando read write e gcount ES nao formatada utilizando read write e gcount Cont Ex ES nao formatada utilizando read gcount e write Arquivo Fig15 07cpp include iostream using stdcin using stdcout using stdendl int main const int SIZE 80 char buffer SIZE cria array de 80 caracteres utiliza funcao read para inserir caracteres no buffer cout Enter a sentence endl cinread buffer 20 Entradasaıda de fluxo ES nao formatada utilizando read write e gcount ES nao formatada utilizando read write e gcount Cont2 utiliza funcoes write e gcount para exibir caracteres de buffer cout endl The sentence entered was endl coutwrite buffer cingcount cout endl return 0 fim de main Entradasaıda de fluxo Estados de erro de fluxo Estados de erro de fluxo O eofbit e configurado para um fluxo de entrada depois que o fim do arquivo e encontrado Um programa pode utilizar a funcaomembro eof para determinar se o fim do arquivo foi encontrado em um fluxo depois de uma tentativa de extrair dados alem do fim do fluxo A chamada desta funcao retorna true se o fim do arquivo foi encontrado em cin e false caso contrario cineof Entradasaıda de fluxo Estados de erro de fluxo Estados de erro de fluxo Cont O goodbit e configurado para um fluxo se nenhum dos bits eofbit failbit ou badbit estiver configurado para o fluxo A funcaomembro good retorna true se as funcoes bad fail e eof retornarem false As operacoes de ES devem ser realizadas somente em fluxos validos A funcaomembro rdstate retorna o estado de erro do fluxo Contudo o meio preferido de testar o estado de um fluxo e utilizar as funcoesmembro eof bad fail e good utilizalas nao requer que o programador conheca bits de status particulares Entradasaıda de fluxo Estados de erro de fluxo Estados de erro de fluxo Cont2 A funcaomembro clear e utilizada para restaurar o estado de um fluxo a um estado valido para que a ES possa prosseguir nesse fluxo O argumentopadrao para clear e goodbit entao o uso desta funcao limpa cin e configura goodbit para o fluxo cinclear Entradasaıda de fluxo Estados de erro de fluxo Estados de erro de fluxo Cont3 Ex Testando estados de erro Arquivo Fig15 22cpp include iostream using stdcin using stdcout using stdendl int main int integerValue exibe resultados de funcoes cin cout Before a bad input operation cinrdstate cinrdstate cineof cineof Entradasaıda de fluxo Estados de erro de fluxo Estados de erro de fluxo Cont4 cinfail cinfail cinbad cinbad cingood cingood Expects an integer but enter a character cin integerValue insere valor de caractere cout endl exibe resultados de funcoes cin depois de entrada invalida cout After a bad input operation cinrdstate cinrdstate cineof cineof Entradasaıda de fluxo Estados de erro de fluxo Estados de erro de fluxo Cont5 cinfail cinfail cinbad cinbad cingood cingood endl endl cinclear limpa o fluxo exibe resultados de funcoes cin depois de limpar cin cout After cinclear cinfail cinfail cingood cingood endl return 0 fim de main Entradasaıda de fluxo Exercıcio Exercıcio 91 sem efeito Experimentando os exemplos fornecidos Execute os codigosfonte dos seguintes exemplos fornecidos nesta unidade e analise cuidadosamente os erros apontados pelo compilador e aponte a solucao em cada caso Arquivos de codigos que deverao ser implementados Fig15 03cpp Fig15 04cpp Fig15 05cpp Fig15 06cpp Fig15 07cpp Fig15 22cpp Entradasaıda de fluxo Referˆencias Referˆencias HM Deitel PJ Deitel C como programar 5a ed Sao Paulo Pearson Prentice Hall 2006 Antonio Mendes da Silva Filho Introducao a programacao orientada a objetos com C Rio de Janeiro Elsevier 2010