Вы находитесь на странице: 1из 8

Informtica Aplicada Engenharia de Alimentos

Informtica Aplicada Engenharia de Alimentos

Aula 4 - Subtema 03

Comandos padro de entrada e saida de dados.


Recebendo entradas do teclado
A linguagem C enxuta, no possui dentro de si os comandos para receber e enviar dados. Requer o
uso de bibliotecas para poder usar comandos de entrada e sada de dados.
A biblioteca mais usada para este fim na linguagem C < stdio.h >, porm comum usar tambm <
conio.h > e < stdlib.h > .
Apresentamos um resumo dos passos bsicos que um programa executa para conduzir um dilogo de
entrada:
1. mostrar uma mensagem na tela solicitando entrada de dados. printf ("texto")
2. uso de uma das funes de entrada [scanf, gets, getch( ), getche( ) ].
3. armazenar o valor de entrada em uma varivel (parte no visvel).
scanf() da biblioteca stdio.h
A funo scanf l entradas numricas do teclado.
Sintaxe:
scanf("formato", &varivel);
formato o tipo de valor que scanf espera ler do teclado.
Tipos bsicos de formato:
%d entrada de nmeros inteiros.
%f entrada de ponto flutuante.
%c entrada de caractere
%s entrada de string de caracteres
O smbolo & colocado imediatamente antes do nome da varivel significa que scanf envia o valor ao
endereo da memria do computador alocado varivel. Este procedimento permite acelerar os
trabalhos de computo. Cuidado: se voc deixa um espao entre o simbolo & e o nome da varivel
ocorrer um erro.
scanfpode ler tambm uma string, mas ela projetada para ler dado valor de string somente at o
primeiro espao na string. Por este motivo aconselhavel usar a funo gets para receber frases que
contenham espaos.
Exemplo:
/*ex09.c exemplo do uso de scanf()*/
#include < stdio.h >
/* diretiva */
#define DIMENSAO 0.15
/* diretiva */

float rey, dens, vel, visc;

/* variveis globais */

main()
/* funo principal */
{
char parada; /* varivel local */
clrscr();
printf ("Qual a densidade?");
scanf ("%f", &dens);
printf ("Qual a viscosidade?");
scanf ("%f", &visc);
printf ("Qual a velocidade?");
scanf ("%f", &vel);
rey=(dens*vel*DIMENSAO)/visc;
printf ("Numero de Reynolds: %10.2f\n", rey);
parada = getche();
}

gets()da biblioteca stdio.h


Sintaxe:
gets(varivel);
A funo gets aceita espaos como parte de uma string e considera o fim de uma entrada quando
pressionamos ENTER . Aps a entrada, gets anexa automaticamente um caracter nulo (\0) no final da
string.
Exemplo:
printf ("Caracteristicas reologicas do produto.\n\n");
printf ("Qual e a densidade?")
gets (densid);

A funo gets pode ler e confirmar entradas numricas. Ele armazena o valor em uma varivel string.
Depois temos que converter o valor da string em nmero. Para essa converso usamos as funes atof
e atoi.
atof( ) e atoi ( )
Convertem strings em nmeros.
atof converte uma string de dgitos em um valor numrico de tipo double.
atoi converte em um valor numrico de tipo int.
Sintaxe:
atof(string);
atoi(string);

"ascii to float"
"ascii to integer"

Ambas se no conseguirem converter a string retornan um valor zero.


Combinando estes comandos podemos criar uma funo para entrada e converso dos dados:
Exemplo:
/* ex39.c converso de strings em nmeros*/
#include < stdio.h >
/* diretivas */
#include < stdlib.h >
main()
{

/* funo principal *
char *s1 = "3.45";

/* atribuies */

char *s2 = "1234";


char *s3 = "3ghk.45";

printf ("%lf\n", atof (s1) );


printf ("%i\n", atoi(s2) );
printf ("%lf", atof(s3) );

Resultados:
3.450000
1234
3.000000
Exemplo: funo definida pelo usurio infloat() para receber valores numricos pelo teclado.
float infloat (char prompt[ ])
{
char instrval[STRLENGTH]; /* entrada em formato string */
float inval;
/* entrada em formato numrico */
do
{

printf (prompt);
gets (instrval); /* a funo atof devolve um valor zero */
/* se instrval no pde ser convertido */
inval = atof(instrval);

}
while (inval < = 0.0);
return (inval);
}
/* final de infloat */

Observao:
O argumento prompt (printf (prompt)) faz com que aparea na tela o sinal de interrogao.
getchar( ) ( < stdio.h > ), getche( ) e getch( ) ( < conio.h > ).
getchar( ) l um caracter do teclado. A funo retorna o caracter lido, aps convert-lo para int.
Quando digitado o dado, ele armazenado em um buffer, at que seja digitado o retorno.
getche( ) e getch( ) retornan um caracter assim que o mesmo seja digitado, ou seja no aguardado
at que seja digitado o retorno.
getche( ) l um caracter do teclado, apresenta-o na tela e o devolve para a funo chamadora.
getch( ) parece com getche( ), exceto por no apresentar o caracter na tela.
Exemplo:
/* ex40.c utilizao de getche() e getch() */
#include < stdio.h >
/* diretiva */
#include < conio.h >
main ()
/* funo principal */
{
char dado;
printf ("Digite um caracter"); scanf ("%c", &dado);
printf ("Caracter lido = %c\n", dado);
printf ("Digite um caracter"); dado = getch ();
printf ("Caracter lido = %c\n", dado);
}

Exemplo:
/* ex55.c exemplo de getchar */
#include < stdio.h >

main()
{
char c;
int x, y;
clrscr();
printf ("Deslocamento? (a,b,c,d,):");
c = getchar();
switch (c)
{
case 'a' :
y ++;
break;
case 'b' :
y --;
break;
case 'c' :
x --;
break;
case 'd' :
x ++;
break;
default:
printf ("n\resp. incorreta|n");
}
printf ("Posio: %d %d \n",x,y);

exit(0);

printf( ) da biblioteca < stdio.h >


A funo printf mostra informao em formato especial. Ela muito usada.
Sintaxe: printf ("formato", valor1, valor2, valor3,...);
formato string de formato na qual voc especifica como quer que aparea a sada, pode incluir texto e
definies de uso de varios tipos de variveis.
valor1,...,valor3,... valores de dados numricos ou string que a funo printf mostrar na tela.
A string de formato pode conter trs tipos de informao:
1. texto literal
2. especificadores de formato
3. smbolos especiais de controle
Texto literal envia diretamente para a tela como parte da sada;
Especificadores de formato - indicam como os argumentos de valor de dados correspondentes do
comando printf sero mostrados.
Smbolo de controle controlam operaes particulares na tela ou impressora - tais como mudanas de
linha, tabulaes . Esses smbolos comeam com o caractere barra invertida (\), e podem aparecer em
qualquer lugar dentro da string de formato.
Especificadores de formato para a funo printf
Todos especificadores comeam com um sinal de porcentagem (%) e terminam com uma ou duas
letras e/ou nmeros que representam um tipo de dado suportados em C.
Os principais especificadores so:
% i inteiro (int)
% d inteiro decimal (int)
% ld inteiro longo (long)
% f ponto flutuante ou nmero decimal (float)
% lf ponto flutuante de dupla presio (double)
% c caracter (char)
% s string (matriz de char)
% e nmero com formato exponencial

Para um tipo de dado numrico, pode incluir largura da imagem e instrues de ponto decimal no
especificador. Essas instrues opcionais aparecem entre o sinal de porcentagem e o cdigo de tipo.
Exemplo:
%4d - valor de nmero inteiro correspondente deve ser um campo de sada de 4 espaos.
%4.2f - valor de nmero de ponto flutuante num campo de 4 espaos e com duas decimais.

Justificando um nmero esquerda na funo printf


Printf normalmente justifica um nmero inteiro ou nmero de ponto flutuante direita dentro de uma
certa largura de sada.
Exemplo:
printf ("Reynolds: %8.0f", rey);
Sada:
Reynolds: 10000
Justificando um nmero direita na funo printf
Mas algumas vezes voc poderia preferir justificar esquerda dentro do printf em campo de sada.
Para tanto, inclua um sinal menos (-) antes do especificador de largura
Exemplo:
printf ("Reynolds: -%8.0f", rey);
Sada:
Reynolds: 10000
Usando simbolos de controle especiais na funo printf
A funo printf no aloca automaticamente a posio de cada texto, por exemplo, em uma nova linha.
Para modificar a posio no printf, devemos fornecer uma instruo especfica na string de formato.
Algumas instrues de controle.
\n
\t
\n\n
\a

mudana de linha.
tabulao.
produz linha em branco.
sinal de audio.

Exemplo:
/*ex08.c exemplo do uso de printf()*/
#include < stdio.h >
/* diretiva */
#define calc "Numero de Reynolds" /* diretivas */
#define dimen 0.450
#define veloc 1.7
#define dens 1200
#define visc 0.78
main()
/* funo principal */
{
char parada;
/* varivel local */
float rey = (dens*veloc*dimen)/visc ;
clrscr();

printf
printf
printf
printf
printf
parada

("Caracteristicas reologicas\n");
("densidade: %4.2f\n ",dens);
("viscosidade: %2.3f\n", visc);
("Dimensoes caracteristicas do sistema: %2.4f\n",dimen);
("O valor do %s e: %6.2", calc,rey);
= getchar();

Enviando sada para a impressora com fprintf


C oferece um nmero de funes de biblioteca que voc pode utilizar para enviar dados a vrios
destinos. Em complemento, o arquivo de cabealho stdio.h define nomes que representam
especificamente a tela e a impressora como destinos de sada. Esses identificadores - algumas vezes
chamados filas predefinas - so como se segue:
Stdout - dispositivo padro de sada, normalmente a tela.
Stdprn - impressora padro . dispositivo identificado como PRN: no DOS.
A funo printf sempre envia sua sada para o stdout. Mas outras funes permitem especificar os
destinos dos dados de sada.
fprintf( ) da biblioteca < stdio.h >.
fprintf usado para enviar dados impressora. Sua sintaxe semelhante a de printf, exceto que um
argumento adicional necessrio.
Sintaxe:
fprintf (destino, "formato", valor1, valor2, valor3,...);
Destino especifica para onde voc quer que a sada seja enviada.
Formato e valor trabalham como com printf .
Se fornecemos o destino como de stdout fprintf se comporta igual a printf.
Para que avance pgina na hora da impresso enviamos um caracter de avano de pgina ("Form
feed").
fprintf("\f") onde f - representa o caracter de avano de pgina.
Exemplo: uma funo definida pelo usurio: printcalc.
void printcalc (float vel, float visc, float dens, float dim)
{
fprintf (stdprn, "Densidade:
%6.2f\n", dens);
fprintf (stdprn, "Viscosidade:
%2.3f\n", visc);
fprintf (stdprn, "Velocidade:
%2.2f\n", vel);
fprintf (stdprn, "Dimensao caracteristica:
%1.3f\n", dim);
fprintf (stdprn, "Numero de Reynolds: %6.2f\n", (dens*vel*dim)/visc );
}

Utilizando funes especiais de controle da tela


gotoxy ( ) da biblioteca < conio.h >.
Durante uma execuo de programa, a posio atual do cursor determina onde um comando
subseqente de sada mostra a informao na tela. Cada posio na tela tem um endereo numrico de
duas partes, consistindo em uma componente horizontal e uma vertical.

A funo gotoxy posiciona o cursor em localizao determinada da tela, para que o comando
subseqente de sada possa a mostrar informao. Cuidado para no confundir GOTOXY com
GOTO. O segundo altamente censurvel ao ser usado em uma linguagem estruturada como C.
Sintaxe:
gotoxy (horizontal, vertical);
Observao:
- horizontal varia de 1 at 80,
- vertical varia 1 at 24.
Os argumentos de gotoxy podem ser expressos como nmeros inteiros literais ou como expresses
aritmticas que calculam endereos de tela.
Exemplo:
/*ex15.c mostra cdigo ASCII extendido*/
#include < stdio.h >
/* diretivas */
#include < conio.h >
main()
/* funo principal */
{
char parada;
/* varivel local */
int i= 0, x = 1, y = 1; /* inicializao de variveis locais */
clrscr();
/* chamada a funo que limpa tela */
do {
/*lao de repetio */
gotoxy(x, y);
printf ("%3d %c",i,i);
i++;
y++;
if (y > = 24) {x += 6, y = 1};
}
while ( i < = 255);
gotoxy (60,24);
printf ("Cdigo ASCII");
parada = getchar();
}

putchar ( ) da biblioteca < stdio.h >.


A funo putchar mostra um dado caracter na posio atual do cursor.
Sintaxe:
putchar (caracter);
O argumento pode ser um caracter literal ou um nmero de cdigo ASCII.
Exemplo:
printf ("\nQuer alterar o valor da velocidade? < S ou N > ");
do
yesno = toupper(getch());
while ((yesno == 'S') && (yesno == 'N'));
putchar(yesno);

clrscr ( ) da biblioteca < stdio.h >.


Apaga todos os caracteres que esto na janela de texto e posiciona o cursor nas coordenadas (1,1) em
relao a janela de texto.

Exemplo:
/* EX03: tabela de converso */
#include < stdio.h >
/* diretivas */
main ()
/
b@

Вам также может понравиться