43
Capítulo V – Comandos de Capítulo V – Comandos de Entrada e Saída Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.3 – Entrada pelo teclado 5.4 – Entrada e saída por arquivos em 5.4 – Entrada e saída por arquivos em disco disco 5.5 – Controle do vídeo-texto 5.5 – Controle do vídeo-texto 5.6 – Vídeo-gráfico 5.6 – Vídeo-gráfico

Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Embed Size (px)

Citation preview

Page 1: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Capítulo V – Comandos de Capítulo V – Comandos de Entrada e SaídaEntrada e Saída

5.1 – Equipamentos de entrada e saída5.1 – Equipamentos de entrada e saída

5.2 – Saída no vídeo-texto5.2 – Saída no vídeo-texto

5.3 – Entrada pelo teclado5.3 – Entrada pelo teclado

5.4 – Entrada e saída por arquivos em 5.4 – Entrada e saída por arquivos em discodisco

5.5 – Controle do vídeo-texto5.5 – Controle do vídeo-texto

5.6 – Vídeo-gráfico5.6 – Vídeo-gráfico

Page 2: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

5.4 – Entrada e Saída por 5.4 – Entrada e Saída por Arquivos em DiscoArquivos em Disco

5.4.1 – Arquivos-textos e arquivos 5.4.1 – Arquivos-textos e arquivos bináriosbinários

Arquivos: Arquivos: regiões contíguas na memória regiões contíguas na memória secundária, dos mais diversos tamanhos, secundária, dos mais diversos tamanhos, destinadas cada uma a guardar destinadas cada uma a guardar informações informações correlatascorrelatas, usadas para um determinado fim, usadas para um determinado fim

Existem arquivos de Existem arquivos de programasprogramas, arquivos de , arquivos de dadosdados, arquivos de , arquivos de imagensimagens, arquivos com , arquivos com somsom digitalizado, etc.digitalizado, etc.

Page 3: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

A A Linguagem CLinguagem C trabalha com trabalha com dois tiposdois tipos de de arquivos:arquivos:

Arquivos-textos:Arquivos-textos:

Seu conteúdo pode ser encarado como uma Seu conteúdo pode ser encarado como uma sequência linear de caracteressequência linear de caracteres

Arquivos de Arquivos de programasprogramas são arquivos-textos são arquivos-textos Alguns arquivos de Alguns arquivos de dadosdados também são também são

Arquivos binários:Arquivos binários:

Podem conter números inteiros e reais em Podem conter números inteiros e reais em binário, textos, imagens, etc.binário, textos, imagens, etc.

Page 4: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Arquivos binários:Arquivos binários:

Tipicamente são sequências lineares de Tipicamente são sequências lineares de estruturasestruturas de mesmo tipo de mesmo tipo

EstruturasEstruturas serão vistas em capítulo serão vistas em capítulo específicoespecífico

Arquivos binários não serão estudados em Arquivos binários não serão estudados em CES-10CES-10

Arquivos-textos:Arquivos-textos:

São os arquivos abordados neste tópicoSão os arquivos abordados neste tópico

Page 5: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Nos arquivos-textos, existe uma Nos arquivos-textos, existe uma divisão em divisão em linhaslinhas proporcionada pelos caracteres proporcionada pelos caracteres ‘\n’‘\n’ ((new linenew line))

Cada um desses caracteres é uma Cada um desses caracteres é uma marca de marca de final de linhafinal de linha

As linhas não têm necessariamente o As linhas não têm necessariamente o mesmo mesmo número de caracteresnúmero de caracteres

Linhas vaziasLinhas vazias são caracterizadas por são caracterizadas por conterem conterem apenas o ‘\n’apenas o ‘\n’ e nada mais e nada mais

Page 6: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

5.4.2 – Abertura e fechamento de 5.4.2 – Abertura e fechamento de arquivos-textosarquivos-textos

Dados de entradaDados de entrada para programas podem ser para programas podem ser retirados de retirados de arquivosarquivos, em vez de serem , em vez de serem digitados por meio do digitados por meio do tecladoteclado

ResultadosResultados de um programa podem ser de um programa podem ser gravados num gravados num arquivoarquivo, em vez de aparecerem , em vez de aparecerem no no vídeovídeo

Todo Todo arquivoarquivo da memória secundária precisa da memória secundária precisa ser associadoser associado a uma a uma variávelvariável do tipo do tipo FILE FILE de de um programa, para ser um programa, para ser acessadoacessado por esse por esse programaprograma

Page 7: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Abertura de um arquivo: Abertura de um arquivo: ato de associar um ato de associar um arquivo do disco a uma variável do tipo arquivo do disco a uma variável do tipo FILEFILE

Em Em CC, essa abertura é feita pela função , essa abertura é feita pela função fopenfopen, , pertencente ao arquivo pertencente ao arquivo stdio.hstdio.h

Exemplo:Exemplo: seja o seguinte trecho de programa: seja o seguinte trecho de programa:

FILE *ff;FILE *ff;

ff = fopen ("C:\\ces10\\programas\\dados", ff = fopen ("C:\\ces10\\programas\\dados", "r");"r");

O arquivo O arquivo dadosdados, localizado na sub-pasta , localizado na sub-pasta programasprogramas da pasta da pasta ces10 ces10 do diretório do diretório CC, , será aberto somente para será aberto somente para leiturasleituras

Page 8: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

FILE *ff;FILE *ff;

ff = fopen ("C:\\ces10\\programas\\dados", "r");ff = fopen ("C:\\ces10\\programas\\dados", "r");

O arquivo O arquivo dados dados fica associado à variável fica associado à variável ffff, ou , ou seja, tudo o que for realizado em seja, tudo o que for realizado em ffff será feito no será feito no arquivo arquivo dadosdados

Se o Se o arquivo a ser abertoarquivo a ser aberto estiver na estiver na mesma mesma pastapasta que contém o que contém o arquivo do programaarquivo do programa que o que o acessará, apenas o acessará, apenas o nome do arquivonome do arquivo é é necessário:necessário:

Não é necessário informar a Não é necessário informar a localizaçãolocalização do do arquivo:arquivo:

ff = fopen ("dados", "r");ff = fopen ("dados", "r");

Page 9: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

FILE *ff;FILE *ff;

ff = fopen ("C:\\ces10\\programas\\dados", "r");ff = fopen ("C:\\ces10\\programas\\dados", "r");

Na Na declaraçãodeclaração de toda variável do tipo de toda variável do tipo FILEFILE,, o asterisco o asterisco ‘*’‘*’ deve ser colocado deve ser colocado antes do seu antes do seu nomenome

Isso é uma Isso é uma característicacaracterística das variáveis do tipo das variáveis do tipo ponteiroponteiro, que serão estudadas em capítulo , que serão estudadas em capítulo específicoespecífico

Variável do tipo Variável do tipo FILEFILE é um é um ponteiroponteiro que que guarda o guarda o endereçoendereço da região de memória para da região de memória para ela reservadaela reservada

Page 10: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Modos de abertura de arquivos-textos:Modos de abertura de arquivos-textos:

A abertura só para A abertura só para leituraleitura ou para ou para leitura leitura inicialinicial de um de um arquivo não existentearquivo não existente falhará falhará

fopenfopen retornará um valor a ser interpretado retornará um valor a ser interpretado como como abertura mal-sucedidaabertura mal-sucedida

Page 11: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Modos de abertura de arquivos-textos:Modos de abertura de arquivos-textos:

Abertura só para Abertura só para escritaescrita ou para escrita ou para escrita inicial: inicial:

Se o arquivo Se o arquivo não existir:não existir: provocará sua provocará sua criaçãocriação

Se o arquivo Se o arquivo já existir:já existir: apagaráapagará todo o seu todo o seu conteúdo, reinicializando-oconteúdo, reinicializando-o

Page 12: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Modos de abertura de arquivos-textos:Modos de abertura de arquivos-textos:

Abertura para Abertura para aumentaraumentar a partir do final: a partir do final:

Se o arquivo Se o arquivo não existir:não existir: provocará sua provocará sua criaçãocriação

Se o arquivo Se o arquivo já existir:já existir: tudo será escrito a tudo será escrito a partir de seu finalpartir de seu finalEm CES-10 só serão

abordados os modos “r” e “w”

Page 13: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Uma variável do tipo Uma variável do tipo FILEFILE ocupa um ocupa um espaçoespaço de vários bytes na memória principal de vários bytes na memória principal

Num dado momento da execução do programa, Num dado momento da execução do programa, apenas um desses bytesapenas um desses bytes pode ser acessado pode ser acessado

Diz-se que existe um Diz-se que existe um cursorcursor posicionado nesse posicionado nesse byte byte

O O cursorcursor pode se pode se movimentarmovimentar ao longo dessa ao longo dessa variável ou arquivo, mediante chamadas de variável ou arquivo, mediante chamadas de funções para funções para leituraleitura ou ou escritaescrita

Page 14: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Ao se Ao se encerraremencerrarem as operações em um arquivo- as operações em um arquivo-texto, deve-se nele executar a operação de texto, deve-se nele executar a operação de fechamentofechamento

– A associação estabelecida por A associação estabelecida por ffopen open é então é então desfeitadesfeita

A função A função fclosefclose, pertencente também ao arquivo , pertencente também ao arquivo stdio.hstdio.h, realiza essa operação, realiza essa operação

Exemplo: fclose (ff)Exemplo: fclose (ff)

O O fechamentofechamento de um arquivo garante que todas de um arquivo garante que todas as alterações realizadas as alterações realizadas na variável a ele na variável a ele associadaassociada redundem também em alterações redundem também em alterações nele nele própriopróprio

Page 15: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Exemplo: Exemplo: seja seja arqarq um arquivo de um arquivo de n n bytes do bytes do diretório do usuáriodiretório do usuário

Seja o seguinte trecho de programa em C:Seja o seguinte trecho de programa em C:

FILE *fl;FILE *fl;

fl = fopen (“arq”, “r+”);fl = fopen (“arq”, “r+”);

Seja também Seja também k < nk < n o número de bytes de o número de bytes de flfl

Ou seja, Ou seja, arqarq não cabe em não cabe em flfl

A seguir um esquema de troca de conteúdo entre A seguir um esquema de troca de conteúdo entre arqarq e e flfl

Page 16: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

LogoLogo após a execução de após a execução de fopenfopen: os : os kk 1 1osos bytes bytes de de arqarq são copiados em são copiados em flfl

O cursor do arquivo é posicionado em seu O cursor do arquivo é posicionado em seu inícioinício

fl

arq

0 1 2 k-1

k k+1

n-1

cópia de k bytes

cursor

Page 17: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Após algumas leituras e escritas, o cursor se Após algumas leituras e escritas, o cursor se movimenta para frentemovimenta para frente

As leituras e escritas são feitas apenas em As leituras e escritas são feitas apenas em fl fl (arq(arq fica desatualizado fica desatualizado))

fl

arq

0 1 2 k-1

k k+1

n-1

cursor

Page 18: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Com mais leituras e escritas, o cursor chega ao Com mais leituras e escritas, o cursor chega ao final de final de flfl, mas não de , mas não de arqarq

arq arq continua desatualizadocontinua desatualizado

fl

arq

0 1 2 k-1

k k+1

n-1

cursor

Page 19: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Para acesso ao próximo byte: o conteúdo de Para acesso ao próximo byte: o conteúdo de flfl é copiado de volta em é copiado de volta em arqarq, atualizando-o , atualizando-o

fl

arq

0 1 2 k-1

k k+1

n-1

cópia de k bytes

Page 20: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Os próximos Os próximos kk bytes de bytes de arqarq são copiados em são copiados em flfl

fl

arq

0 1 2 k-1

k k+1

n-1

cópia de k bytes

O cursor vai para o início de fl, mas não de arq

cursor

Page 21: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

A execução de A execução de fclosefclose copia copia flfl de volta em de volta em arqarq, , atualizando-oatualizando-o

fl

arq

0 1 2 k-1

k k+1

n-1

cópia de k bytes

Page 22: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

5.4.3 – Leitura e escrita em arquivos-5.4.3 – Leitura e escrita em arquivos-textostextos

Em C, a Em C, a leituraleitura e a e a escritaescrita em arquivos-textos em arquivos-textos é feita respectivamente pelas funções é feita respectivamente pelas funções fscanf fscanf e e fprintf fprintf , também pertencentes ao arquivo , também pertencentes ao arquivo stdio.hstdio.h

Formas gerais:Formas gerais:

fscanf (Variavel, CadeiaDeControle, fscanf (Variavel, CadeiaDeControle, OutrosArgumentos);OutrosArgumentos);

fprintf (Variavel, CadeiaDeControle, fprintf (Variavel, CadeiaDeControle, OutrosArgumentos);OutrosArgumentos);

Page 23: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

fscanf (Variavel, CadeiaDeControle, fscanf (Variavel, CadeiaDeControle, OutrosArgumentos);OutrosArgumentos);

fprintf (Variavel, CadeiaDeControle, fprintf (Variavel, CadeiaDeControle, OutrosArgumentos);OutrosArgumentos);

CadeiaDeControle e OutrosArgumentosCadeiaDeControle e OutrosArgumentos têm o mesmo significado visto para as funções têm o mesmo significado visto para as funções scanfscanf e e printfprintf

VariavelVariavel é o nome da variável do tipo é o nome da variável do tipo FILEFILE associada ao associada ao arquivoarquivo que sofrerá as operações que sofrerá as operações de de leituraleitura e/ou e/ou escritaescrita

Page 24: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

fscanf (Variavel, CadeiaDeControle, fscanf (Variavel, CadeiaDeControle, OutrosArgumentos);OutrosArgumentos);

fprintf (Variavel, CadeiaDeControle, fprintf (Variavel, CadeiaDeControle, OutrosArgumentos);OutrosArgumentos);

O O valor retornadovalor retornado pelas funções pelas funções fscanf fscanf e e fprintf fprintf é o mesmo retornado pelas funções é o mesmo retornado pelas funções scanf scanf e e printfprintf

fscanf fscanf pode ser usada como um detector de pode ser usada como um detector de final de arquivofinal de arquivo

Quando Quando fscanffscanf encontra e lê a marca de final encontra e lê a marca de final de arquivo, ela retorna de arquivo, ela retorna -1 (menos 1)-1 (menos 1)

Page 25: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Exemplo: Exemplo: seja o seguinte trecho de programa:seja o seguinte trecho de programa:

int a, b, soma, x, n; FILE *f1, *f2;int a, b, soma, x, n; FILE *f1, *f2;

soma = 0; n = 0;soma = 0; n = 0;

f1 = fopen ("infile", "r");f1 = fopen ("infile", "r");

f2 = fopen ("outfile", "w");f2 = fopen ("outfile", "w");

x = fscanf(f1, "%d%d", &a, &b);x = fscanf(f1, "%d%d", &a, &b);

printf ("x = %d\n", x);printf ("x = %d\n", x);

while (x > 0) {while (x > 0) {

if (x == 2) {soma += a + b; n += 2;}if (x == 2) {soma += a + b; n += 2;}

else {soma += a; n++;}else {soma += a; n++;}

x = fscanf(f1, "%d%d", &a, &b); printf ("x = %d\n", x = fscanf(f1, "%d%d", &a, &b); printf ("x = %d\n", x);x);

}}

fprintf (f2, "A soma dos %d numeros eh %d", n, soma);fprintf (f2, "A soma dos %d numeros eh %d", n, soma);

fclose (f1); fclose (f2);fclose (f1); fclose (f2);

1 12 43 21 67 23 74 23 10

infile

x = 2x = 2x = 2x = 2x = 1x = -1

No vídeo

A soma dos 9 numeros eh 274

outfile

Encontrou final de arquivo

Page 26: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Mudando o conteúdo de Mudando o conteúdo de infileinfile::

int a, b, soma, x, n; FILE *f1, *f2;int a, b, soma, x, n; FILE *f1, *f2;

soma = 0; n = 0;soma = 0; n = 0;

f1 = fopen ("infile", "r");f1 = fopen ("infile", "r");

f2 = fopen ("outfile", "w");f2 = fopen ("outfile", "w");

x = fscanf(f1, "%d%d", &a, &b);x = fscanf(f1, "%d%d", &a, &b);

printf ("x = %d\n", x);printf ("x = %d\n", x);

while (x > 0) {while (x > 0) {

if (x == 2) {soma += a + b; n += 2;}if (x == 2) {soma += a + b; n += 2;}

else {soma += a; n++;}else {soma += a; n++;}

x = fscanf(f1, "%d%d", &a, &b); printf ("x = %d\n", x = fscanf(f1, "%d%d", &a, &b); printf ("x = %d\n", x);x);

}}

fprintf (f2, "A soma dos %d numeros eh %d", n, soma);fprintf (f2, "A soma dos %d numeros eh %d", n, soma);

fclose (f1); fclose (f2);fclose (f1); fclose (f2);

1 12 43 21 67 23 74 23 10 #

infile

x = 2x = 2x = 2x = 2x = 1x = 0

No vídeo

A soma dos 9 numeros eh 274

outfile

Não encontrou final de arquivo

Page 27: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Exercícios 5.4:Exercícios 5.4:

1) Fazer um programa para:1) Fazer um programa para:

   Ler o nome de um arquivo existente no Ler o nome de um arquivo existente no

diretório desse programa (leitura de cadeia de diretório desse programa (leitura de cadeia de caracteres - próximo capítulo)caracteres - próximo capítulo)

Produzir um outro arquivo contendo as linhas Produzir um outro arquivo contendo as linhas do arquivo lido numeradasdo arquivo lido numeradas

  

É interessante ler um arquivo contendo um É interessante ler um arquivo contendo um programa, para que se obtenha a numeração programa, para que se obtenha a numeração de suas linhasde suas linhas

Page 28: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Capítulo V – Comandos de Capítulo V – Comandos de Entrada e SaídaEntrada e Saída

5.1 – Equipamentos de entrada e saída5.1 – Equipamentos de entrada e saída

5.2 – Saída no vídeo-texto5.2 – Saída no vídeo-texto

5.3 – Entrada pelo teclado5.3 – Entrada pelo teclado

5.4 – Entrada e saída por arquivos em 5.4 – Entrada e saída por arquivos em discodisco

5.5 – Controle do vídeo-texto5.5 – Controle do vídeo-texto

5.6 – Vídeo-gráfico5.6 – Vídeo-gráfico

Page 29: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

5.5 – Controle do Vídeo-5.5 – Controle do Vídeo-TextoTexto

5.5.1 – A função gotoxy5.5.1 – A função gotoxy

Vista nas aulas de lab, Vista nas aulas de lab, gotoxygotoxy posiciona o posiciona o cursorcursor do vídeo-texto na posição dada por seus do vídeo-texto na posição dada por seus argumentosargumentos

Forma geral: Forma geral:

gotoxy (expressão1, expressão2)gotoxy (expressão1, expressão2)

No da coluna

No da linha

Page 30: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

5.5 – Controle do Vídeo-5.5 – Controle do Vídeo-TextoTexto

5.5.1 – A função gotoxy5.5.1 – A função gotoxy

Para ser usada no CodeBlocks, Para ser usada no CodeBlocks, gotoxygotoxy pertence à pertence à biblioteca biblioteca conio2conio2 (arquivos (arquivos <conio2.h> <conio2.h> e e <libconio.a><libconio.a>))

Esses dois arquivos deverão ser copiados Esses dois arquivos deverão ser copiados respectivamente para as pastas respectivamente para as pastas includeinclude e e liblib, de , de CodeBlocks\MinGWCodeBlocks\MinGW

Instruções de como configurar o Instruções de como configurar o CodeBlocksCodeBlocks para para trabalhar com a biblioteca trabalhar com a biblioteca conio2conio2 são apresentadas são apresentadas nas aulas práticasnas aulas práticas

Page 31: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Exemplo: Exemplo: desenho de segmentos de retas comdesenho de segmentos de retas com ‘*’‘*’

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

#include <conio2.h>#include <conio2.h>

int main () {int main () {

int a, b, i;int a, b, i;

printf ("Maximize a tela e digite algo!");printf ("Maximize a tela e digite algo!");

getch ();getch ();

clrscr ();clrscr ();

for (a=1, b=1, i=1; i<=10; a+=8, b+=2, i++) {for (a=1, b=1, i=1; i<=10; a+=8, b+=2, i++) {

gotoxy (a, b); printf ("********");gotoxy (a, b); printf ("********");

}}

printf ("\n\nDigite algo para encerrar: ");printf ("\n\nDigite algo para encerrar: ");

getch (); return 0;getch (); return 0;

}}

Na tela

Sempre posiciona o cursor na posição [a, b]

Inicialmente [a, b] = [1, 1]

A cada repetição a+=8 e b+=2

Limpa a tela: conio2.h

Page 32: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Exemplo: Exemplo: programa para o desenho de uma programa para o desenho de uma casacasa

Resultado no vídeo

Page 33: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

#include <stdio.h>#include <stdio.h>

#include <conio.h>#include <conio.h>

#include <conio2.h>#include <conio2.h>

int main () {int main () {

int i,j,x,y,z;int i,j,x,y,z;

printf ("Maximize a tela e digite algo!");printf ("Maximize a tela e digite algo!");

getch ();getch ();

clrscr ();clrscr ();

/*/* Desenho do telhado */Desenho do telhado */

for (x=10,y=12,z=40,i=1; i<=7; x+=3,y-=1,z-=6,i++) {for (x=10,y=12,z=40,i=1; i<=7; x+=3,y-=1,z-=6,i++) {

gotoxy (x,y); printf ("%s%*s","////",z,"\\\\\\\\");gotoxy (x,y); printf ("%s%*s","////",z,"\\\\\\\\");

}}

gotoxy (x,y); printf ("/\\");gotoxy (x,y); printf ("/\\");

Page 34: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

/*/* Desenho do piso: coordenada inicial (17, 19); Desenho do piso: coordenada inicial (17, 19); Comprimento 30 */Comprimento 30 */

x=17; y=19; gotoxy (x,y);x=17; y=19; gotoxy (x,y);

printf printf ("##############################");("##############################");

/*/* Desenho das paredes: altura 8; intervalo 28 */Desenho das paredes: altura 8; intervalo 28 */

for (y--,i=1;i<=8;y--,i++) {for (y--,i=1;i<=8;y--,i++) {

gotoxy (x,y); printf ("%c%29c",'#', '#');gotoxy (x,y); printf ("%c%29c",'#', '#');

}}

Page 35: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

/*/* Desenho da janela e da porta: janela: 8x3; porta: Desenho da janela e da porta: janela: 8x3; porta: 5x65x6 */*/

for (x=22,y=13,i=1;i<=3;y++,i++){for (x=22,y=13,i=1;i<=3;y++,i++){

gotoxy (x,y);gotoxy (x,y);

printf ("########");printf ("########");

}}

for (x=38,y=13,i=1;i<=6;y++,i++){for (x=38,y=13,i=1;i<=6;y++,i++){

gotoxy (x,y);gotoxy (x,y);

printf ("#####");printf ("#####");

}}

Page 36: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

/*/* Desenho da chamine:Desenho da chamine: */*/

x=40; y=4; gotoxy (x,y);x=40; y=4; gotoxy (x,y);

printf ("###");printf ("###");

for (y++,i=1;i<=3;y++,i++){for (y++,i=1;i<=3;y++,i++){

gotoxy (x,y); printf ("%c%2c",'#','#');gotoxy (x,y); printf ("%c%2c",'#','#');

}}

x=42; gotoxy (x,y); printf ("%c",'#');x=42; gotoxy (x,y); printf ("%c",'#');

/*/* Fechamento da telaFechamento da tela */*/

gotoxy (1, 23);gotoxy (1, 23);

printf ("Digite algo para encerrar: ");printf ("Digite algo para encerrar: ");

getch (); return 0;getch (); return 0;

}}

Page 37: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

5.5.2 – Outras funções do conio2.h5.5.2 – Outras funções do conio2.h

textbackground:textbackground: estabelece a cor de fundo de estabelece a cor de fundo de um texto escritoum texto escrito

textcolor:textcolor: estabelece a cor do texto estabelece a cor do texto

Exemplo: Exemplo: no programa da casinha:no programa da casinha:

printf ("Maximize a tela e digite algo!");printf ("Maximize a tela e digite algo!");

getch ();getch ();

clrscr (); clrscr (); textcolor(BLUE); textcolor(BLUE); textbackground(LIGHTRED);textbackground(LIGHTRED);

for (i = 1; i <= 40; i++)for (i = 1; i <= 40; i++)

printf (" printf (" "); ");

getch ();getch ();80 espaços

Escreve 40 linhas vazias com fundo LIGHTRED

Page 38: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Resultado:Resultado:

Page 39: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Capítulo V – Comandos de Capítulo V – Comandos de Entrada e SaídaEntrada e Saída

5.1 – Equipamentos de entrada e saída5.1 – Equipamentos de entrada e saída

5.2 – Saída no vídeo-texto5.2 – Saída no vídeo-texto

5.3 – Entrada pelo teclado5.3 – Entrada pelo teclado

5.4 – Entrada e saída por arquivos em 5.4 – Entrada e saída por arquivos em discodisco

5.5 – Controle do vídeo-texto5.5 – Controle do vídeo-texto

5.6 – Vídeo-gráfico5.6 – Vídeo-gráfico

Page 40: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

5.6 – Vídeo-Gráfico5.6 – Vídeo-Gráfico

Visto nas aulas de Visto nas aulas de laboratóriolaboratório

No CodeBlocks são usadas rotinas gráficas No CodeBlocks são usadas rotinas gráficas desenvolvidas pelo Prof. Carlos Henrique desenvolvidas pelo Prof. Carlos Henrique Quartucci ForsterQuartucci Forster

Page 41: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

Exercícios 5.6:Exercícios 5.6:

1) Seja um tabuleiro de xadrez e as peças 1) Seja um tabuleiro de xadrez e as peças Rainha, Torre, Bispo e Cavalo. Fazer um Rainha, Torre, Bispo e Cavalo. Fazer um programa que leia a inicial de várias dessas programa que leia a inicial de várias dessas peças e as coordenadas de cada uma dentro do peças e as coordenadas de cada uma dentro do tabuleiro e, para cada peça em separado, tabuleiro e, para cada peça em separado, desenhe no vídeo-texto e no vídeo-gráfico o desenhe no vídeo-texto e no vídeo-gráfico o tabuleiro mostrando a posição da peça, as tabuleiro mostrando a posição da peça, as casas atacadas por ela e as casas livres de seu casas atacadas por ela e as casas livres de seu ataque. ataque.

Ver exemplos no próximo slideVer exemplos no próximo slide

Page 42: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

R-5-6

Page 43: Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída

2) 2) Fazer umFazer um programa que leia uma frase e a programa que leia uma frase e a escreva no vídeo-gráfico, de modo que cada escreva no vídeo-gráfico, de modo que cada caractere da frase ocupe um retângulo de caractere da frase ocupe um retângulo de 33x21 pixels33x21 pixels

3) Desenhar a Bandeira do Brasil no vídeo-texto 3) Desenhar a Bandeira do Brasil no vídeo-texto e no vídeo-gráficoe no vídeo-gráfico