io.tex 4.99 KB
Newer Older
1 2 3 4 5
\documentclass[apostila.tex]{subfiles}


\begin{document}

6 7 8
\chapter{Funções de entrada e saída}


9 10 11
Funções de entrada e saída são aquelas que obtêm informações de uma determinada
entrada (normalmente através da entrada padrão, i.e. teclado) e enviam
informações para uma determinada saída (normalmente para a saída padrão,
12 13
i.e. vídeo).

14 15 16
Nesta seção estaremos tratando apenas de funções que trabalham com entrada e
saída padrão, ou seja, obtêm uma informação a partir do teclado e imprimem informações
para o vídeo.
17 18 19 20 21 22 23 24 25
A biblioteca que contêm todas essas funções é a stdio.h.

\section{printf()}

A função printf() é a maneira mais fácil de fazer com que um programa exiba informações na tela. Ela recebe dois argumentos: uma string de formato (obrigatória) e uma lista de argumentos (opcional).

Uma string de formato especifica como a saída da função printf deverá ser formatada. Os três
componentes possíveis de uma string de formato são:

26
\begin{description}
27
	\item[Texto literal] que é exibido na tela exatamente como foi incluído na
28
			string de formato.
29 30 31
	\item[Sequências de escape] que incluem instruções especiais de formatação.
Uma sequência de escape consiste de uma barra invertida (\textbackslash) seguida
de um único caractere. As sequências de escape mais utilizadas estão na tabela
32
\ref{tab:seq_esc}.
33 34 35 36
	\item[Especificadores de formatação] que consistem no símbolo de
porcentagem (\%) seguido por um único caractere. Estes especificadores informam
à função printf() como interpretar as variáveis que serão impressas. O string de
formato deve conter um especificador de formatação para cada variável a ser
37 38 39 40 41
impressa.
\end{description}


\begin{table}[h!]
42 43 44 45 46 47 48 49 50 51
	\centering
	\begin{tabular}{|l|l|}
		\hline \verb|\a| & Sinal Sonoro \\
		\hline \verb|\b| & retrocesso (backspace) \\
		\hline \verb|\n| & nova linha \\
		\hline \verb|\t| & tabulação horizontal \\
		\hline \verb|\\| & barra invertida \\
		\hline \verb|\?| & ponto de interrogação \\
		\hline \verb|\'| &  aspa simples \\
		\hline \verb|\"| & aspas duplas \\
52
		\hline
53 54
	\end{tabular}
	\caption{Sequências de escape}
55
	\label{tab:seq_esc}
56 57 58
\end{table}


59
\begin{table}[h!]
60 61 62 63 64 65
	\centering
	\begin{tabular}{|l|l|}
		\hline especificador & Significado \\
		\hline \%c & caractere simples \\
		\hline \%d & número inteiro decimal com sinal \\
		\hline \%u & número inteiro decimal sem sinal \\
66
		\hline \%s & string alfanumérica \\
67 68
		\hline \%f & número decimal com ponto flutuante \\
		\hline \%e & número em notação científica \\
69
		\hline
70 71 72 73 74
	\end{tabular}
	\caption{Especificadores de formatação}
\end{table}


75 76
Por exemplo:

77 78 79 80 81 82 83 84 85 86 87 88 89
\lstinputlisting{exemplos/printf.c}

A saída será:

\begin{verbatim}
Teste de Printf
Inteiro: -10
Sem Sinal: 20
Ponto Flutuante: 7.32
String Alfanumerica: Teste de Printf
\end{verbatim}

\section{scanf()}
90 91 92 93 94
A função scanf() lê dados do teclado de acordo com um formato especificado e
atribui os dados recebidos a uma ou mais variáveis do programa.
Assim como o printf(), scanf() também usa uma string de formato para descrever
como os dados recebidos serão formatados.
A string de formato utiliza os mesmos êspecificadores de formatação
95 96
utilizados pela função printf().

97
Além da string de formato, esta função recebe uma lista de argumentos, que
98 99 100 101 102 103 104 105 106 107 108 109
devem ser passados por referência (precedidos do caractere \&).


\begin{lstlisting}
#include <stdio.h>

void main()
{
	float y;
	int x;

	printf("Digite um numero de ponto flutuante, depois um inteiro: ");
110 111
	scanf("%f %d", &y, &x); // Le os numeros do teclado
	printf("Voce digitou %f e %d\n", y, x); // imprime-os
112 113 114 115 116 117 118 119 120 121 122 123 124
}
\end{lstlisting}

A saída será:

\begin{verbatim}
Digite um numero de ponto flutuante, depois um inteiro: 17.65 9
Voce digitou 17.65 e 9
\end{verbatim}


\section{getchar() e putchar()}

125 126
A função getchar(), que está definida na biblioteca padro stdio.h,
obtém o próximo caractere da entrada padrão e o ecoa na tela.
127 128
Esta função não aceita argumentos, e retorna o caractere lido.

129 130
A função putchar(), também definida na biblioteca padrão stdio.h,
envia um caractere para a saída padrão.
131 132
A função retorna o caractere que acabou de ser enviado ou EOF em caso de erro.

133 134
\vspace*{\fill}

135 136 137 138 139 140
\begin{lstlisting}
#include <stdio.h>

int main()
{
	int ch;
141

142 143
	while((ch = getchar()) != '\n')
		putchar(ch);
144

145 146 147 148
	return 0;
}
\end{lstlisting}

149 150 151 152
Quando este programa for executado, a função getchar() é chamada e aguarda até
receber um caractere da entrada padrão.
Como getchar() é uma função de entrada com ``buffer'', nenhum caractere é
recebido até que o usuário pressione a tecla [enter].
153 154
Não obstante, todas as teclas pressionadas são refletidas na tela.

155 156
Ao pressionar [enter], todos os caracteres digitados, inclusive o caractere
nova linha, são enviados para a entrada padrão pelo sistema operacional.
157 158
A função getchar() retorna os caracteres individualmente.

159 160
No programa acima, os caracteres recebidos pela função getchar() são
armazenados na variável ch, que é então ecoada na tela utilizando-se a
161 162
função putchar().

163
\end{document}