ces-10 introduÇÃo À computaÇÃo capítulo v comandos de entrada e saída

82
CES-10 INTRODUÇÃO À CES-10 INTRODUÇÃO À COMPUTAÇÃO COMPUTAÇÃO Capítulo V Capítulo V Comandos de Entrada e Comandos de Entrada e Saída Saída

Upload: internet

Post on 22-Apr-2015

112 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

CES-10 INTRODUÇÃO CES-10 INTRODUÇÃO À COMPUTAÇÃOÀ COMPUTAÇÃO

Capítulo V Capítulo V

Comandos de Entrada e Comandos de Entrada e SaídaSaída

Page 2: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de 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 3: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.1 – Equipamentos de 5.1 – Equipamentos de Entrada e SaídaEntrada e Saída

São os equipamentos responsáveis pela São os equipamentos responsáveis pela comunicaçãocomunicação do computador com o do computador com o mundo mundo exteriorexterior

Equipamentos de entrada mais conhecidos: Equipamentos de entrada mais conhecidos: tecladoteclado e e mousemouse

Teclado:Teclado: muito usado para edição de documentos muito usado para edição de documentos (programas, textos, arquivos de dados, etc.) (programas, textos, arquivos de dados, etc.)

Mouse:Mouse: para selecionar e executar tarefas para selecionar e executar tarefas sugeridas por botões e menus apresentados na telasugeridas por botões e menus apresentados na tela

Page 4: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Drive de disquetes:Drive de disquetes: muito usado durante bom muito usado durante bom tempo para entrada e saída, mas já tempo para entrada e saída, mas já completamente substituído pelo completamente substituído pelo drive de CD-drive de CD-DVD-ROMDVD-ROM

Outros importantes Outros importantes dispositivos de entradadispositivos de entrada: :

- Microfone- Microfone - Web-Cam- Web-Cam

- Scanner- Scanner - Leitora óptica- Leitora óptica

- Célula fotossensora- Célula fotossensora - Pen-drive- Pen-drive

- Sensores para controle de processos - Sensores para controle de processos industriaisindustriais

- Etc.- Etc.

Page 5: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Equipamentos de saída mais conhecidos:Equipamentos de saída mais conhecidos:

Vídeo Vídeo Auto-falante Auto-falante Impressoras (a jato de tinta, a laser, etc.) Impressoras (a jato de tinta, a laser, etc.) Impressor de gráficos (plotter) Impressor de gráficos (plotter)

Há Há vídeosvídeos para entrada de dados: para entrada de dados:

Substituem o Substituem o mousemouse A seleção de tarefas dos menus e botões A seleção de tarefas dos menus e botões

pode ser feita por toque de dedo, caneta ou pode ser feita por toque de dedo, caneta ou lápis apropriadoslápis apropriados

Page 6: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Equipamentos industriaisEquipamentos industriais controlados por controlados por computador: computador:

PrensasPrensas Tanques para banhos químicosTanques para banhos químicos Robôs, etc. Robôs, etc.

Eles são considerados Eles são considerados unidades de saídaunidades de saída de de um computadorum computador

Page 7: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

HD’s e fitas magnéticasHD’s e fitas magnéticas são considerados são considerados como:como:

Memória secundáriaMemória secundária Equipamentos de entrada e saídaEquipamentos de entrada e saída

Este capítulo limita-se a apresentar entrada Este capítulo limita-se a apresentar entrada pelo pelo tecladoteclado, saída pelo , saída pelo vídeovídeo e entrada e e entrada e saída por saída por arquivos em discoarquivos em disco

São usados dispositivos de programação da São usados dispositivos de programação da Linguagem CLinguagem C

Page 8: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de 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 9: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.2 – Saída no Vídeo-Texto5.2 – Saída no Vídeo-Texto

5.2.1 – Vídeo-texto e vídeo-gráfico5.2.1 – Vídeo-texto e vídeo-gráfico

O vídeo de um computador é uma O vídeo de um computador é uma área área retangularretangular constituída por um conjunto de constituída por um conjunto de áreas minúsculasáreas minúsculas de tamanho uniforme de tamanho uniforme denominadas denominadas pixelspixels

Cada Cada pixelpixel pode ter pode ter coloraçãocoloração e e brilhobrilho distintos distintos

Essa área é dividida ortogonalmente em um Essa área é dividida ortogonalmente em um conjunto de conjunto de linhaslinhas e de e de colunascolunas de de pixelspixels

Page 10: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Todas as Todas as linhaslinhas têm o têm o mesmo número de mesmo número de pixelspixels

Todas as Todas as colunascolunas têm o têm o mesmo número de mesmo número de pixelspixels

As As linhaslinhas e as e as colunascolunas do vídeo são do vídeo são numeradasnumeradas

Cada Cada pixelpixel pode ser pode ser identificadoidentificado pelos números pelos números de sua de sua colunacoluna e de sua e de sua linhalinha ( (coordenadascoordenadas do do pixel)pixel)

Foram muito comuns vídeos com Foram muito comuns vídeos com 640 x 480 640 x 480 pixelspixels, mas hoje há vídeos com , mas hoje há vídeos com números bem números bem maioresmaiores

Page 11: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Para Para textostextos no vídeo, os caracteres costumam no vídeo, os caracteres costumam ocupar ocupar pequenos retângulospequenos retângulos de pixels de pixels

Em ambientes de programação, tipicamente Em ambientes de programação, tipicamente um um caracterecaractere ocupa uma área de ocupa uma área de 11x7 pixels11x7 pixels

Page 12: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Nos computadores Nos computadores mais antigosmais antigos, os diversos , os diversos programas programas só exibiam textossó exibiam textos em sua tela de em sua tela de vídeo vídeo

Os Os caracterescaracteres ocupavam áreas de pixels de ocupavam áreas de pixels de igual tamanho denominadas igual tamanho denominadas espaços para espaços para caracterescaracteres

A tela era dividida em A tela era dividida em 25 linhas25 linhas e e 80 colunas80 colunas desses espaços desses espaços

Cada espaço tinha suas Cada espaço tinha suas coordenadascoordenadas na tela, na tela, que eram os números de sua que eram os números de sua linhalinha e de sua e de sua colunacoluna

Page 13: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Os programas não acessavam os pixels Os programas não acessavam os pixels individualmenteindividualmente, mas sim os , mas sim os espaços para espaços para caracterescaracteres

O nome dessa organização é O nome dessa organização é vídeo-textovídeo-texto

Em contraposição, a organização que permite o Em contraposição, a organização que permite o acesso individual aos pixels é denominada acesso individual aos pixels é denominada vídeo-gráficovídeo-gráfico

Até agora os programas só utilizaram o Até agora os programas só utilizaram o vídeo-vídeo-textotexto

Page 14: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

A maioria dos ambientes de programação A maioria dos ambientes de programação abrem, para a execução de um programa, uma abrem, para a execução de um programa, uma tela que maximizada tem tela que maximizada tem 80 colunas de 80 colunas de espaços para caracteres (vídeo-texto)espaços para caracteres (vídeo-texto)

As funções As funções scanf scanf e e printfprintf e outras produzem e outras produzem nela seus efeitos nela seus efeitos

Caso se deseje manipular o Caso se deseje manipular o vídeo-gráficovídeo-gráfico, , cada ambiente tem um conjunto de cada ambiente tem um conjunto de funções funções destinadas a esse fimdestinadas a esse fim

Isso deve ser visto no Isso deve ser visto no Tópico 5.6Tópico 5.6 deste deste capítulo; antes dele, será estudado o capítulo; antes dele, será estudado o vídeo-vídeo-textotexto

Page 15: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.2.2 – Escrita de um só caractere5.2.2 – Escrita de um só caractere

A macro A macro putcharputchar, pertencente ao arquivo , pertencente ao arquivo stdio.hstdio.h, escreve no vídeo um caractere , escreve no vídeo um caractere fornecido como argumentofornecido como argumento

Exemplo:Exemplo: pelos comandos pelos comandos

c = ‘b’;c = ‘b’;

putchar (c + ‘A’ – ‘a’);putchar (c + ‘A’ – ‘a’);

será escrito no vídeo o caractere será escrito no vídeo o caractere ‘B’‘B’

c + ‘A’ - ‘a’ =‘b’ + 65 - 97 =98 - 32 = 66 = ‘B’

Page 16: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.2.3 – Escrita de cadeias de caracteres 5.2.3 – Escrita de cadeias de caracteres e valores de expressõese valores de expressões

A função A função printfprintf, pertencente ao arquivo , pertencente ao arquivo stdio.hstdio.h, , destina-se a escrever no vídeo sequências de destina-se a escrever no vídeo sequências de caracterescaracteres e valores de e valores de expressõesexpressões

Forma geral:Forma geral:

printf (CadeiaDeControle, printf (CadeiaDeControle, OutrosArgumentos);OutrosArgumentos);

CadeiaDeControle CadeiaDeControle contém:contém: Caracteres a serem escritosCaracteres a serem escritos Caracteres com formatação para escrever os Caracteres com formatação para escrever os

OutrosArgumentosOutrosArgumentos

Page 17: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Exemplo: Exemplo: seja a seguinte chamada de seja a seguinte chamada de printfprintf

printf (“A loja vende %d %s por R$%f”, 5, “cds”, printf (“A loja vende %d %s por R$%f”, 5, “cds”, 5*12.00);5*12.00);

Cadeia de controle:Cadeia de controle: “A loja vende %d %s por “A loja vende %d %s por R$%f”R$%f”

Outros argumentos:Outros argumentos: 5, “cds”, 5*12.00 5, “cds”, 5*12.00

Saída no vídeo:Saída no vídeo: A loja vende 5 cds por A loja vende 5 cds por R$60.000000R$60.000000

Todos os caracteres da Todos os caracteres da cadeia de controlecadeia de controle, , inclusive os espaços, são escritos, exceto os inclusive os espaços, são escritos, exceto os formatos de escritaformatos de escrita

Page 18: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

printf (“A loja vende %d %s por R$%f”, 5, “cds”, printf (“A loja vende %d %s por R$%f”, 5, “cds”, 5*12.00);5*12.00);

Saída no vídeo:Saída no vídeo: A loja vende 5 cds por A loja vende 5 cds por R$60.000000R$60.000000

%d: %d: formato para escrever formato para escrever 55 em inteiro-decimal em inteiro-decimal

%s: %s: formato para escrever a cadeia de caracteres formato para escrever a cadeia de caracteres “cds” “cds” sem as aspassem as aspas

%f: %f: formato para escrever o valor da expressão formato para escrever o valor da expressão 5*12.00 5*12.00 em real-decimal com em real-decimal com 66 dígitos dígitos fracionáriosfracionários

Trocando-se Trocando-se %f%f por por %d%d, ou , ou 5*12.005*12.00 por por 5*125*12, os , os resultados serão incorretosresultados serão incorretos

Page 19: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Tabela de formatos de escrita da Linguagem Tabela de formatos de escrita da Linguagem C:C:

Page 20: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Exemplo: Exemplo: formatos para reaisformatos para reais

Seja o trecho de programa:Seja o trecho de programa:

float x = 12.34;float x = 12.34;

printf ("Formato f: x = %f\n", x);printf ("Formato f: x = %f\n", x);

printf ("Formato g: x = %g\n", x);printf ("Formato g: x = %g\n", x);

printf ("Formato e: x = %e", x);printf ("Formato e: x = %e", x);

Formato f: x = 12.340000Formato g: x = 12.34Formato e: x = 1.234000e+01

Resultado

Page 21: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.2.4 – Especificação do campo para 5.2.4 – Especificação do campo para escritaescrita

Seja o seguinte trecho de programaSeja o seguinte trecho de programa::

int x;int x;

printf (" x x^2 x^3 e^x log10(x)");printf (" x x^2 x^3 e^x log10(x)");

printf (“\n---------------------------------------------");printf (“\n---------------------------------------------");

for (x = 1; x <= 10; x++)for (x = 1; x <= 10; x++)

printf (“\n %d %d %d %f %f",printf (“\n %d %d %d %f %f",

x, x*x, x*x*x, exp(x), log10(x));x, x*x, x*x*x, exp(x), log10(x)); x x^2 x^3 e^x log10(x)--------------------------------------------- 1 1 1 2.718282 0.000000 2 4 8 7.389056 0.301030 3 9 27 20.085537 0.477121 4 16 64 54.598150 0.602060 5 25 125 148.413159 0.698970 6 36 216 403.428793 0.778151 7 49 343 1096.633158 0.845098 8 64 512 2980.957987 0.903090 9 81 729 8103.083928 0.954243 10 100 1000 22026.465795 1.000000

Resultado:

Colunas desalinhadas

x, x2, x3, ex usam diferentes nos de dígitos para diferentes valores de x

Page 22: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Trocando-se as chamadas de printfTrocando-se as chamadas de printf::printf (" x x^2 x^3 e^x log10(x)\n");printf (" x x^2 x^3 e^x log10(x)\n");

printf (" %d %d %d %f %f\n",printf (" %d %d %d %f %f\n",

x, x*x, x*x*x, exp(x), log10(x));x, x*x, x*x*x, exp(x), log10(x));

respectivamente por:respectivamente por:printf ("%4s%9s%9s%20s%11s","x", "x^2", "x^3", "e^x", printf ("%4s%9s%9s%20s%11s","x", "x^2", "x^3", "e^x", "log10(x)");"log10(x)");

printf ("\n%4d%9d%9d%20f%11f", x, x*x, x*x*x, exp(x), printf ("\n%4d%9d%9d%20f%11f", x, x*x, x*x*x, exp(x), log10(x));log10(x));

x x^2 x^3 e^x log10(x)----------------------------------------------------- 1 1 1 2.718282 0.000000 2 4 8 7.389056 0.301030 3 9 27 20.085537 0.477121 4 16 64 54.598150 0.602060 5 25 125 148.413159 0.698970 6 36 216 403.428793 0.778151 7 49 343 1096.633158 0.845098 8 64 512 2980.957987 0.903090 9 81 729 8103.083928 0.954243 10 100 1000 22026.465795 1.000000

%20s escreve a cadeia “e^x” num espaço de 20 casas, justaposto à direita

%20f escreve o valor de exp(x) num espaço de 20 casas, justaposto à direita

Page 23: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Para justapor à esquerda, usar o sinal ‘-’ Para justapor à esquerda, usar o sinal ‘-’ (menos)(menos)::printf ("%-4s%-9s%-9s%20s%11s","x", "x^2", "x^3", "e^x", printf ("%-4s%-9s%-9s%20s%11s","x", "x^2", "x^3", "e^x", "log10(x)");"log10(x)");

printf ("\n%-4d%-9d%-9d%20f%11f", x, x*x, x*x*x, exp(x), printf ("\n%-4d%-9d%-9d%20f%11f", x, x*x, x*x*x, exp(x), log10(x));log10(x));

x x^2 x^3 e^x log10(x)-----------------------------------------------------1 1 1 2.718282 0.0000002 4 8 7.389056 0.3010303 9 27 20.085537 0.4771214 16 64 54.598150 0.6020605 25 125 148.413159 0.6989706 36 216 403.428793 0.7781517 49 343 1096.633158 0.8450988 64 512 2980.957987 0.9030909 81 729 8103.083928 0.95424310 100 1000 22026.465795 1.000000

Page 24: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.2.5 – Especificação da precisão para 5.2.5 – Especificação da precisão para nnosos reais reais

Seja o seguinte trecho de programaSeja o seguinte trecho de programa::

double x = 12.3456789012;double x = 12.3456789012;

printf ("Formato f: x = %15.7f\n", x);printf ("Formato f: x = %15.7f\n", x);

printf ("Formato g: x = %15.7g\n", x);printf ("Formato g: x = %15.7g\n", x);

printf ("Formato e: x = %15.7e", x);printf ("Formato e: x = %15.7e", x);

Formato f: x = 12.3456789Formato g: x = 12.34568Formato e: x = 1.2345679e+01

Resultado

2º número dentro do formato:

Formatos %f e %e:no de casas após o ponto

Formato %g:no total de dígitos a serem escritos

Page 25: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

22oo número para outros formatos: número para outros formatos:

Seja o seguinte trecho de programaSeja o seguinte trecho de programa::

printf ("Formato d: %10.7d\n", 1234); printf ("Formato d: %10.7d\n", 1234);

printf ("Formato c: %10.7c\n", 'B');printf ("Formato c: %10.7c\n", 'B');

printf ("Formato s+: %10.5s\n", "ABCDEFGH");printf ("Formato s+: %10.5s\n", "ABCDEFGH");

printf ("Formato s-: %-10.5s", "ABCDEFGH");printf ("Formato s-: %-10.5s", "ABCDEFGH");

Formato d: 0001234Formato c: BFormato s+: ABCDEFormato s-: ABCDE

Resultado

Formato %d: acrescenta zeros à esquerda até chegar ao 2o número

Formato %c: sem utilidade

Formato %s: número de caracteres escritos

Page 26: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.2.6 – Variação no campo de escrita e 5.2.6 – Variação no campo de escrita e na precisãona precisão

Seja o seguinte esqueleto de chamada de Seja o seguinte esqueleto de chamada de printfprintf::

printf (“Valor = %*.*f”, printf (“Valor = %*.*f”,

expressao1, expressao2, expressao3);expressao1, expressao2, expressao3);

Nesta chamada, será escrito o valor de Nesta chamada, será escrito o valor de expressao3expressao3: :

Num espaço dado pelo valor de Num espaço dado pelo valor de expressao1expressao1

Com um número de dígitos após o ponto dado Com um número de dígitos após o ponto dado pelo valor de pelo valor de expressao2expressao2

Page 27: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

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

double x = 337.3777337337;double x = 337.3777337337;

int n;int n;

for (n = 1; n<=7; n++)for (n = 1; n<=7; n++)

printf ("###%*.*f###\n", 8+n, n, x);printf ("###%*.*f###\n", 8+n, n, x);

### 337.4###### 337.38###### 337.378###### 337.3777###### 337.37773###### 337.377734###### 337.3777337###

Resultado

A cada repetição do comando for:

A precisão e o tamanho do campo de escrita crescem de uma unidade

Page 28: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Exemplo: Exemplo: traçado da curva deitada de uma traçado da curva deitada de uma função:função:

Seja a função Seja a função y = xy = x22 – 2x – 3 – 2x – 3, no intervalo , no intervalo [-2, 4][-2, 4]

O eixo das O eixo das ordenadasordenadas ficará na ficará na horizontalhorizontal

O eixo das O eixo das abscissasabscissas ficará na ficará na verticalvertical, na , na coluna 10coluna 10 do vídeo-texto do vídeo-texto

Assim a função muda para Assim a função muda para y = 10 + xy = 10 + x22 – 2x – 3 – 2x – 3

Os pontos da curva serão escritos com o Os pontos da curva serão escritos com o caractere caractere ‘#’‘#’

Page 29: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

y = 10 + xy = 10 + x22 – 2x – 3 – 2x – 3, no intervalo , no intervalo [-2, 4][-2, 4]

Seja o seguinte trecho de programa:Seja o seguinte trecho de programa:

int x;int x;

for (x = -2; x<=4; x++)for (x = -2; x<=4; x++)

printf ("%*c\n", 10 + x*x - 2*x - 3, '#');printf ("%*c\n", 10 + x*x - 2*x - 3, '#');

x y

-2 15

-1 10

0 7

1 6

2 7

3 10

4 15

Tabela paray = 10 + x2 –

2x – 3

Resultado no vídeo

Page 30: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Exemplo: Exemplo: sofisticações no desenho da curva:sofisticações no desenho da curva:

Seja a função Seja a função y = xy = x22 – 2x – 3 – 2x – 3, no intervalo , no intervalo [-5, [-5, 7]7]

O eixo das O eixo das abscissasabscissas ficará na ficará na verticalvertical, na , na coluna 5coluna 5 do vídeo-texto do vídeo-texto

Assim a função muda para Assim a função muda para y = 5 + xy = 5 + x22 – 2x – 3 – 2x – 3

Serão desenhados os dois Serão desenhados os dois eixoseixos e uma e uma réguarégua

Page 31: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Resultado a ser obtido para Resultado a ser obtido para y = xy = x22 – 2x – 3 – 2x – 3 em em [-[-5, 7]5, 7]

Page 32: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Programa:Programa:

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

#include <stdlib.h>#include <stdlib.h>

int main () {int main () {

int x, j, func;int x, j, func;

/* Tracado da regua *//* Tracado da regua */

printf ("----|----|----|----|----|----|----|----|\n");printf ("----|----|----|----|----|----|----|----|\n");

/* Calculo da funcao no intervalo [-5, +7] *//* Calculo da funcao no intervalo [-5, +7] */

for (x=-5;x<=7;x++) {for (x=-5;x<=7;x++) {

func = 5 + x*x - 2*x - 3;func = 5 + x*x - 2*x - 3;

Page 33: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

/* Se x!=0, marcar o ponto da curva e um ponto do eixo das /* Se x!=0, marcar o ponto da curva e um ponto do eixo das abscissas */abscissas */

if (x != 0) {if (x != 0) {

if (func < 5) printf ("%*c%*c", func, '*', 5-if (func < 5) printf ("%*c%*c", func, '*', 5-func, func, '|');'|');

else if (func == 5) printf ("%*c", func, '*');else if (func == 5) printf ("%*c", func, '*');

else printf ("%*c%*c", 5, '|', func-5, '*');else printf ("%*c%*c", 5, '|', func-5, '*');

}}

/* Se x=0, tracar tambem o eixo das ordenadas *//* Se x=0, tracar tambem o eixo das ordenadas */

elseelse

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

if (j == func) printf ("%c", '*');if (j == func) printf ("%c", '*');

else if (j == 5) printf ("%c", '|');else if (j == 5) printf ("%c", '|');

else printf ("%c", '-');else printf ("%c", '-');

printf ("\n");printf ("\n");

}}

printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;

}}

Page 34: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.2.7 – Valor retornado por printf5.2.7 – Valor retornado por printf

printf printf retorna o número de caracteres escritos retorna o número de caracteres escritos pela execução de sua chamada pela execução de sua chamada

Esse valor Esse valor não é muito usadonão é muito usado em programas em programas corriqueiroscorriqueiros

Exemplo: Exemplo: Seja o trecho de programa:Seja o trecho de programa:

int i;int i;

i = printf ("A loja vende %d %s por R$%f", 5, i = printf ("A loja vende %d %s por R$%f", 5, "cds", 5*12.0);"cds", 5*12.0);

printf ("\n\nNumero de caracteres escritos: %d", printf ("\n\nNumero de caracteres escritos: %d", i);i);

A loja vende 5 cds por R$60.000000

Numero de caracteres escritos: 34Resultad

o

Page 35: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de 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 36: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.3 – Entrada pelo Teclado5.3 – Entrada pelo Teclado

5.3.1 – O teclado e seu buffer5.3.1 – O teclado e seu buffer

Algumas funções da biblioteca destinadas a fazer Algumas funções da biblioteca destinadas a fazer entrada de dadosentrada de dados, retiram os dados do , retiram os dados do buffer do buffer do tecladoteclado

Caso ele esteja Caso ele esteja vaziovazio, o computador fica , o computador fica aguardandoaguardando o operador digitar uma sequência de o operador digitar uma sequência de caracteres encerrada pela tecla caracteres encerrada pela tecla enterenter, enchendo-, enchendo-oo

Então os dados são retirados daliEntão os dados são retirados dali

Caso contrário, não há necessidade de se Caso contrário, não há necessidade de se digitar digitar nadanada, pois , pois já há dadosjá há dados a serem lidos a serem lidos

Page 37: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Outras funções de entrada Outras funções de entrada não utilizam tal não utilizam tal bufferbuffer e ficam aguardando digitação e ficam aguardando digitação

A macro A macro getchargetchar e a função e a função scanfscanf usam esse usam esse bufferbuffer

As funções As funções getchgetch e e getchegetche não o utilizam não o utilizam

getchargetchar, , getchgetch e e getchegetche são vistas a seguir são vistas a seguir

Page 38: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.3.2 – Leitura de um só caractere5.3.2 – Leitura de um só caractere

Pode ser feita pela macro Pode ser feita pela macro getchargetchar ou pelas ou pelas funções funções getchgetch e e getchegetche

Elas retornam o Elas retornam o código ASCIIcódigo ASCII do caractere do caractere digitadodigitado

A macro A macro getchargetchar localiza-se no arquivo localiza-se no arquivo stdio.hstdio.h

Ela utiliza o Ela utiliza o buffer do tecladobuffer do teclado

Page 39: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Exemplo: Exemplo: mesmo programa para reescrever as mesmo programa para reescrever as letras maiúsculas digitadasletras maiúsculas digitadas

Trocou-se Trocou-se scanfscanf por por getchar getchar e um dos e um dos printfprintf’s ’s por por putcharputchar

#include <stdio.h>#include <ctype.h>#include <stdlib.h>int main () {

char c;printf ("Digite uma frase encerrada por enter:\n\n\

t"); c = getchar();printf ("\nLetras maiusculas digitadas:\n\n\t");while (!iscntrl (c)) {

if (isupper (c)) putchar(c);c = getchar();

} printf ("\n\n"); system ("pause"); getch ();}

Page 40: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

As funções As funções getch getch e e getchegetche localizam-se no localizam-se no arquivo arquivo conio.hconio.h

Elas não utilizam o Elas não utilizam o buffer do tecladobuffer do teclado

Ficam Ficam aguardandoaguardando o operador digitar uma o operador digitar uma tecla tecla

getche getche dá eco no vídeodá eco no vídeo

getch getch não dá eco no vídeonão dá eco no vídeo

Page 41: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Exemplo:Exemplo: seja trecho de programa seja trecho de programa

ResultadoResultado quando o operador digita quando o operador digita ‘x’‘x’ e e ‘8’‘8’::

char c;printf ("Digite uma tecla: "); c = getch ();printf ("\n\nTecla digitada: %c", c);printf ("\n\nDigite uma tecla: "); c = getche ();printf ("\n\nTecla digitada: %c", c);

Digite uma tecla:

Tecla digitada: x

Digite uma tecla: 8

Tecla digitada: 8

Page 42: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

As funções As funções getch getch e e getchegetche podem ser usadas podem ser usadas para controlar o para controlar o fechamento da telafechamento da tela de de execução. Exemplo:execução. Exemplo:

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

#include <conio.h> // Dispensado no CodeBlocks#include <conio.h> // Dispensado no CodeBlocks

int main () {int main () {

printf ("Teste de getch:");printf ("Teste de getch:");

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

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

}}

Obs.: Obs.: o valor retornado por o valor retornado por getchgetch, que é o , que é o código ASCII do caractere digitado, código ASCII do caractere digitado, não é não é atribuídoatribuído a nenhuma variável a nenhuma variável

Page 43: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.3.3 – Leitura de valores para várias 5.3.3 – Leitura de valores para várias variáveisvariáveis

A função A função scanfscanf pertencente ao arquivo pertencente ao arquivo stdio.hstdio.h destina-se a ler informações do destina-se a ler informações do buffer do buffer do tecladoteclado e armazená-las em e armazená-las em variáveisvariáveis especificadasespecificadas

Tais Tais informaçõesinformações devem estar contidas em uma devem estar contidas em uma ou mais ou mais cadeias de caracterescadeias de caracteres encerradas por encerradas por ‘enter’‘enter’, fornecidas pelo operador, por meio do , fornecidas pelo operador, por meio do tecladoteclado

Cada umaCada uma dessas cadeias, ao ser digitada, irá dessas cadeias, ao ser digitada, irá preencherpreencher o buffer o buffer

Page 44: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

scanfscanf vai lendo caracteres do buffer, para vai lendo caracteres do buffer, para formar valoresformar valores a serem armazenados nas a serem armazenados nas variáveis especificadas variáveis especificadas

Cada caractere lido é Cada caractere lido é eliminadoeliminado do buffer do buffer

Caso o buffer Caso o buffer fique vaziofique vazio durante a execução durante a execução de uma de uma chamadachamada dede scanfscanf e ainda haja e ainda haja valores a serem lidos valores a serem lidos na mesma chamadana mesma chamada: :

O computador deve O computador deve pararparar, esperando que o , esperando que o operador digite operador digite outra cadeiaoutra cadeia de caracteres de caracteres encerrada por encerrada por ‘enter’ ‘enter’

Page 45: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Para a formação de Para a formação de valores de determinados valores de determinados tipostipos, há necessidade de , há necessidade de converterconverter os os caracteres lidos em uma caracteres lidos em uma representação representação adequada de bitsadequada de bits

Exemplo:Exemplo: seja a formação de um valor para uma seja a formação de um valor para uma variável do tipo variável do tipo intint (formato (formato %d%d))

Supondo os seguintes caracteres lidos: Supondo os seguintes caracteres lidos: ‘-’‘-’, , ‘4’‘4’, , ‘1’‘1’, , ‘3’‘3’ e e ‘7’‘7’. .

Eles devem ser convertidos no número -Eles devem ser convertidos no número -41374137 binário em complemento de 2 de 4 bytes binário em complemento de 2 de 4 bytes

Esse valor será armazenado no local Esse valor será armazenado no local reservado para tal variávelreservado para tal variável

Page 46: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Exemplo:Exemplo: seja a formação de um valor para seja a formação de um valor para uma variável do tipo uma variável do tipo floatfloat (formato (formato %f%f) )

Supondo os seguintes caracteres lidos: Supondo os seguintes caracteres lidos: ‘2’‘2’, , ‘3’‘3’, , ‘.’‘.’, , ‘7’‘7’, , ‘5’‘5’ e e ‘2’‘2’

Eles devem ser Eles devem ser convertidosconvertidos no número no número binário mais próximo possível de binário mais próximo possível de 23.75223.752 em em ponto-flutuanteponto-flutuante de 4 bytes de 4 bytes

Esse valor será armazenado no local Esse valor será armazenado no local reservado para tal variávelreservado para tal variável

Page 47: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Forma geral das chamadas de scanf:Forma geral das chamadas de scanf:

scanf (CadeiaDeControle, scanf (CadeiaDeControle, OutrosArgumentos);OutrosArgumentos);

OutrosArgumentos: endereçosOutrosArgumentos: endereços das variáveis das variáveis que receberão os valores lidos, que receberão os valores lidos, convenientemente convertidosconvenientemente convertidos

Operador de Operador de endereçamentoendereçamento: o caractere : o caractere ‘&’‘&’

Page 48: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

scanf (CadeiaDeControle, OutrosArgumentos);scanf (CadeiaDeControle, OutrosArgumentos);

CadeiaDeControle:CadeiaDeControle: cadeia de caracteres para cadeia de caracteres para gerenciar todo o processo de gerenciar todo o processo de leitura e conversãoleitura e conversão

Pode conter os mais Pode conter os mais variados tiposvariados tipos de de caracterescaracteres

No entanto, seus elementos No entanto, seus elementos principaisprincipais são os são os chamados chamados formatos de leituraformatos de leitura

Formatos de leitura:Formatos de leitura: sub-cadeias iniciadas pelo sub-cadeias iniciadas pelo caractere caractere ‘%’‘%’

Os Os outros caracteresoutros caracteres trazem informações sobre trazem informações sobre o o tipo de conversãotipo de conversão a ser realizada com os a ser realizada com os caracteres lidoscaracteres lidos

Page 49: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

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

char a, b; int n; float x; double y;char a, b; int n; float x; double y;

scanf (“%c%c%d%f%lf”, &a, &b, &n, &x, &y);scanf (“%c%c%d%f%lf”, &a, &b, &n, &x, &y);

Cadeia de controle:Cadeia de controle: “%c%c%d%f%lf”“%c%c%d%f%lf”

Outros argumentos: &a, &b, &n, &x, &yOutros argumentos: &a, &b, &n, &x, &y

Formato %c: Formato %c: leitura de um leitura de um caracterecaractere e sua conversão e sua conversão para para ASCIIASCII

Formato %d: Formato %d: leitura de leitura de dígitos decimaisdígitos decimais e sua e sua conversão para binário em conversão para binário em complemento de 2complemento de 2

Formatos %f e %lf: Formatos %f e %lf: leitura e conversão de leitura e conversão de números números reaisreais em forma em forma decimaldecimal ou ou exponencialexponencial, para , para ponto-ponto-flutuante de 4 e 8 bytesflutuante de 4 e 8 bytes respectivamente respectivamente

Page 50: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Tabela de formatos de leitura da Linguagem Tabela de formatos de leitura da Linguagem C:C:

O formato O formato %s%s usado para leitura de usado para leitura de cadeias cadeias de caracteresde caracteres será estudado com detalhes no será estudado com detalhes no capítulo sobre capítulo sobre variáveis indexadasvariáveis indexadas

Page 51: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Caracteres fora de formatos de leitura:Caracteres fora de formatos de leitura:

Na Na cadeia de controlecadeia de controle de uma chamada da de uma chamada da função função scanfscanf podem aparecer caracteres podem aparecer caracteres fora fora de formatosde formatos de leitura de leitura

Nesse caso, tais caracteres também devem Nesse caso, tais caracteres também devem aparecer no buffer do tecladoaparecer no buffer do teclado, senão a , senão a execução dessa chamada é execução dessa chamada é interrompidainterrompida

Page 52: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

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

char c = '#'; int i;char c = '#'; int i; printf ("Digite um numero inteiro e um printf ("Digite um numero inteiro e um

caractere:\n");caractere:\n");

scanf (scanf ("%d-----%c""%d-----%c", &i, &c);, &i, &c);

printf ("Numero digitado: %d", i);printf ("Numero digitado: %d", i);

printf ("\nCaractere digitado: %c", c);printf ("\nCaractere digitado: %c", c);Entre o número e o caractere pedidos devem ser digitados 5 caracteres ‘-’

Caso contrário, a execução será interrompida antes da leitura para a variável c

c continuará com seu valor anterior

Resultados:

Para entrada 37-----&:

Numero digitado: 37Caractere digitado: &

Para entrada 37---& ou 37--&--&:

Numero digitado: 37Caractere digitado: #

Page 53: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Caracteres fora de formatos de leitura:Caracteres fora de formatos de leitura:

Caso os caracteres fora desses formatos sejam Caso os caracteres fora desses formatos sejam espaços em branco (‘ ’)espaços em branco (‘ ’), as , as exigênciasexigências para a para a cadeia digitada são cadeia digitada são menores menores

Havendo na cadeia de controle uma sequência de Havendo na cadeia de controle uma sequência de um ou mais um ou mais espaços espaços em branco, em branco, nãonão é necessário é necessário introduzir na cadeia digitada uma introduzir na cadeia digitada uma sequência de sequência de espaçosespaços

Caso isso aconteça, tal sequência Caso isso aconteça, tal sequência nãonão precisa ser precisa ser do do mesmo tamanhomesmo tamanho daquela da cadeia de controle daquela da cadeia de controle

Esta característica pode ser usada para descartar Esta característica pode ser usada para descartar espaços em brancoespaços em branco e caracteres e caracteres <enter><enter> para a para a leitura de um caractereleitura de um caractere

Page 54: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Exemplo: Exemplo: eliminação da necessidade da variável eliminação da necessidade da variável lixolixo

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

#include <stdlib.h>#include <stdlib.h>

int main () {int main () {

int n, q; char c;int n, q; char c;

printf ("Quadrado de um numero (s/n)? ");printf ("Quadrado de um numero (s/n)? ");

scanf ("%c", &c);scanf ("%c", &c);

while (c == 's' || c == 'S') {while (c == 's' || c == 'S') {

printf ("\n\tDigite o numero: ");printf ("\n\tDigite o numero: ");

scanf ("%d", &n);scanf ("%d", &n);

q = n * n;q = n * n;

printf ("\n\tQuadrado (%d) = %d", n, q);printf ("\n\tQuadrado (%d) = %d", n, q);

printf ("\n\nQuadrado de um numero (s/n)? ");printf ("\n\nQuadrado de um numero (s/n)? ");

scanf (" %c", &c);scanf (" %c", &c);

}}

printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;

}}

Antes de processar o %c, scanf lê e descarta todos os brancos e o <enter> do buffer do teclado

Não há necessidade de jogar o <enter> no lixo

Page 55: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Caracteres incompatíveis com formatos de Caracteres incompatíveis com formatos de leitura: provocam o encerramento da leitura: provocam o encerramento da execução de scanfexecução de scanf

Exemplo: Exemplo: seja o seguinte programaseja o seguinte programa

char c; int a;char c; int a;printf ("Digite uma sequencia de caracteres:\n");printf ("Digite uma sequencia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

123we x<enter>

Entrada a ser digitada

Page 56: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

Buffer do teclado

Vídeo

123we x<enter>

Entrada a ser digitada

ac

Page 57: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

123we x<enter>

Entrada a ser digitada

Buffer do teclado

Digite cadeia de caracteres:_

Vídeo

ac

Page 58: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

123we x<enter>

Entrada a ser digitada

Buffer do teclado

Digite cadeia de caracteres:_

Vídeo

ac

Buffer vazio

O operador digita a cadeia

Page 59: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

123we x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x_

Vídeo

ac

Buffer vazio

O operador digita a cadeia

Page 60: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

123we x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x_

Vídeo

ac

scanf processa %d, percorrendo o buffer

Elimina os 3 brancos

Lê “123” e encontra ‘w’ que é incompatível e para

Converte “123” para 123 binário e atribui à variável a

Page 61: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

we x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x_

Vídeo

123ac

scanf processa %d, percorrendo o buffer

Elimina os 3 brancos

Lê “123” e encontra ‘w’ que é incompatível e para

Converte “123” para 123 binário e atribui à variável a

Page 62: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

we x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x_

Vídeo

123ac

scanf processa %c

Encontra ‘w’ e o atribui à variável c

Page 63: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

e x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x_

Vídeo

123awc

scanf processa %c

Encontra ‘w’ e o atribui à variável c

Page 64: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

e x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x_

Vídeo

123awc

Page 65: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

e x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = w_

Vídeo

123awc

Page 66: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

e x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = w_

Vídeo

123awc

scanf processa %c

Encontra ‘e’ e o atribui à variável c

Page 67: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = w_

Vídeo

123aec

scanf processa %c

Encontra ‘e’ e o atribui à variável c

Page 68: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = w_

Vídeo

123aec

Page 69: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = wa = 123; c = e_

Vídeo

123aec

Page 70: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = wa = 123; c = e_

Vídeo

123aec

scanf processa %d, percorrendo o buffer

Elimina os 3 brancos

Encontra ‘x’ que é incompatível e para

scanf encerra sua execução

Page 71: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = wa = 123; c = e_

Vídeo

123aec

scanf processa %d, percorrendo o buffer

Elimina os 3 brancos

Encontra ‘x’ que é incompatível e para

scanf encerra sua execução

Page 72: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = wa = 123; c = e_

Vídeo

123aec

Page 73: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = wa = 123; c = ea = 123; c = e_

Vídeo

123aec

Page 74: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

x<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = wa = 123; c = ea = 123; c = e_

Vídeo

123aec

scanf processa %c

Encontra ‘x’ e o atribui à variável c

Page 75: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = wa = 123; c = ea = 123; c = e_

Vídeo

123axc

scanf processa %c

Encontra ‘x’ e o atribui à variável c

Page 76: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = wa = 123; c = ea = 123; c = e_

Vídeo

123axc

Page 77: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = wa = 123; c = ea = 123; c = ea = 123; c = x_

Vídeo

123axc

Page 78: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

char c; int a;char c; int a;printf ("Digite cadeia de caracteres:\n");printf ("Digite cadeia de caracteres:\n");scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("\na = %d; c = %c\n", a, c);printf ("\na = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%d%c", &a, &c);scanf ("%d%c", &a, &c);printf ("a = %d; c = %c\n", a, c);printf ("a = %d; c = %c\n", a, c);scanf ("%c", &c);scanf ("%c", &c);printf ("a = %d; c = %c", a, c);printf ("a = %d; c = %c", a, c);

<enter>

Buffer do teclado

Digite cadeia de caracteres: 123we x

a = 123; c = wa = 123; c = ea = 123; c = ea = 123; c = x_

Vídeo

123axc

A execução continua!

Page 79: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.3.4 – Limpeza do buffer do teclado5.3.4 – Limpeza do buffer do teclado

Muitas vezes é desejável Muitas vezes é desejável esvaziar o buffer do esvaziar o buffer do tecladoteclado, antes da chamada de uma função que , antes da chamada de uma função que o utilizao utiliza

Retomando o exemplo dos quadrados: Retomando o exemplo dos quadrados: int n, q; char c;printf ("Quadrado de um numero (s/n)? ");scanf ("%c", &c);while (c == 's' || c == 'S') {

printf ("Digite o numero: ");scanf ("%d", &n);q = n * n;printf ("Quadrado (%d) = %d", n, q);printf ("\n\nQuadrado de um numero (s/n)? ");scanf ("%c", &c);

}

O <enter> permanece no buffer e será lido para a variável c

Page 80: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Poder-se-ia usar Poder-se-ia usar getchegetche em vez de em vez de scanfscanf, ou , ou usar a cadeia de controle usar a cadeia de controle “ %c”“ %c” mas há mas há situações em que isso não é possívelsituações em que isso não é possível

A função A função setbufsetbuf do do stdio.hstdio.h esvazia seu esvazia seu primeiro argumento, caso o segundo primeiro argumento, caso o segundo argumento seja a constante argumento seja a constante NULLNULLint n, q; char c;

printf ("Quadrado de um numero (s/n)? ");scanf ("%c", &c);while (c == 's' || c == 'S') {

printf ("Digite o numero: ");scanf ("%d", &n);q = n * n;printf ("Quadrado (%d) = %d", n, q);printf ("\n\nQuadrado de um numero (s/n)? ");setbuf (stdin, NULL); scanf ("%c", &c);

}

stdin é o buffer do teclado

Page 81: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

Há também o método Há também o método força brutaforça bruta, que lê todos , que lê todos os caracteres do buffer do teclado até encontrar os caracteres do buffer do teclado até encontrar o o <enter><enter>::

A necessidade desse esvaziamento é grande, na A necessidade desse esvaziamento é grande, na leitura de leitura de cadeias de caracteres cadeias de caracteres (função (função getsgets))

int n, q; char c;printf ("Quadrado de um numero (s/n)? ");scanf ("%c", &c);while (c == 's' || c == 'S') {

printf ("Digite o numero: ");scanf ("%d", &n);q = n * n;printf ("Quadrado (%d) = %d", n, q);printf ("\n\nQuadrado de um numero (s/n)? ");while (getchar() != '\n'); scanf ("%c", &c);

}

Page 82: CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo V Comandos de Entrada e Saída

5.3.5 – Valor retornado por scanf5.3.5 – Valor retornado por scanf

scanf scanf retorna o número de retorna o número de conversões bem conversões bem sucedidassucedidas pela execução de sua chamada pela execução de sua chamada

Exemplo: Exemplo: Seja o trecho de programa:Seja o trecho de programa:

int a = 1, b = 1, i;printf ("Digite 2 numeros inteiros: ");i = scanf ("%d%d", &a, &b);printf ("\n\ta = %d; b = %d\n", a, b);printf ("\n\tNumero de leituras: %d\n", i);

Resultados de 3 execuções