4. Operações de Entrada e Saída
Nos capitulos anteriores utilizaram-se algumas funções de entrada e saída de dados que, só agora serão explicadas com mais pormenor. Estas funções, não são intrínsecas à linguagem, tendo sendo desenvolvidas à parte e encontram-se em bibliotecas (conjunto de ficheiros fonte compilados e agrupados num ficheiro). As funções básicas de input e output disponíveis em todas as implementações de C constituem a biblioteca de rotinas standard (Standard library routines). Várias declarações e macros necessárias a estas rotinas são incluidas num programa através da linha
#include <stdio.h>
As rotinas de output formatado aqui apresentadas são :
printf (s_control,arg1,arg2,...);
Escreve a string de controle 's_control' no terminal. Os argumentos serão introduzidos na string de controle de acordo com as especificações nelas existentes.
sprintf (buf,s_control,arg1,arg2,...);
O mesmo que printf() excepto que o output é colocado num buffer (i.e. um array) especificado por buf.
4.2.1 Especificações da Saída Formatada
As especificações do formato para printf() começam com um caracter % e terminam com um caracter de conversão. Existem várias opções e caracteres de conversão possíveis. Os caracteres de conversão, e as resultantes interpretações dos correspondentes argumentos são os seguintes:
Qualquer outro caracter é imprimido literalmente; por exemplo, printf (%%) imprime o sinal de percentagem. Os números são escritos justificados à direita.
As especificações podem opcionalmente incluir (na ordem seguinte):
Exemplos : Saídas da impressão com printf da string Instituto Politécnico, simulando os espaços em branco com _ (Underscore).
| %24s | ________Instituto Politécnico |
| %-24s | Instituto Politécnico________ |
| %24 16s | ________Instituto Polité |
| %-24 16s | Instituto Polité________ |
| %16s | Instituto Polité |
A rotina scanf() de input formatado torna o input numa forma que é rigorosamente o inverso do printf(). A sintaxe é:
scanf(s_control,arg1,arg2,...);
onde
s_control
é uma string. O input é lido e interpretado de acordo
com a string de controle. Cada um dos restantes argumentos
deverá ser um endereço, o input é armazenado nesse
endereço tendo em atenção as especificações de conversão
da string de controle.
Se se pretender ler um inteiro, a tendência será para
escrever
int i;
scanf (%d,i);
tal, no entanto, não funciona, porque os argumentos da scanf devem ser endereços.
Assim, dever-se-á escrever,
scanf (%d,&i);
em que,& é o operador que permite obter o endereço da variável.
Deve-se ter em atenção que a situação é distinta quando se pretende ler uma string, pois o nome da string é um endereço, como se discutirá no capítulo sobre arrays.
Um dos erros mais comuns com scanf é esquecer isto; fazer sempre com que todos os argumentos da função scanf sejam endereços.
A função
sscanf (buf,s_control,arg1,arg2,...);
funciona mais ou menos como a scanf excepto que lê dados de uma string buf em vez de os ler do teclado.
A string de controle das funções scanf, ou sscanf pode conter espaços brancos (os quais são ignorados), especificações de conversão e caracteres vulgares.
4.3.1 Especificações da entrada formatada
Especificações de conversão consistem no caracter %, no caracter opcional de supressão de atribuição *, num n.º opcional especificando a largura máxima do campo, e no caracter de conversão.
Os caracteres vulgares são esperados para combinar com o próximo caracter não branco do input. Se a supressão de atribuição é indicada com *, então o próximo campo de input é saltado. Os caracteres de conversão possíveis e as correspondentes interpretações de input são :
d => Inteiro decimal
o => Inteiro octal
x => Inteiro hexadecimal
c => Caracter simples: neste caso o salto normal
de espaçoes brancos é suprimido no array de caracteres.
s => neste caso o argumento deve ser o endereco
de um array de caracteres suficientemente grande para
armazenar o input (incluindo o caracter nulo). Os caracteres
são lidos até ser encontrado um espaço.
f => N.º de virgula flutuante, possivelmente incluindo
o sinal e expoente.
e => o mesmo que 'f'.
Se os caracteres de conversão d,o ou x, são precedidos por um l, o input correspondente é interpretado como um número de vírgula flutuante de precisão dupla, double.
O argumento correspondente deve ser um endereço de um double em vez de um float. Esquecer isto é outro erro comum quando se utiliza a função scanf.
A função scanf pára quando atinge o fim da string de controle ou quando o input falha ao tentar cumprir com a especificação de controle. Retorna como valor, o n.º de campos de entrada que cumpriram e aos quais tenham sido atribuídos valores.
4.4 Outras funções da Biblioteca Standard.
Para além das funções de entrada e saída formatada já estudadas, existem outras funções também muito importantes. Estas funções tambem requerem a instrução de inclusão do ficheiro stdio.h.
Ler um caracter do standard input (teclado) :
int c;
c=getchar();
Esta funcao retorna um inteiro correspondente ao caracter entrado, ou o valor da constante EOF se atingiu o fim do ficheiro ou ocorreu um erro.
Escrever um caracter no standard output:
char string[80]
puts(string);
Ler uma string do standard input terminada com \n:
gets(string);
A string lida é colocada em string. A função retorna o valor da constante NULL quando encontra o fim do ficheiro ou em caso de erro.
Todas as funções apresentadas têm em comum, o fazer parte da livraria (biblioteca) standard, no entanto os compiladores oferecem outras funções. Estas dependem normalmente do sistema, e como tal, exploram bastante bem as suas potencialidades.
São apresentadas as duas funções seguintes que existem na generalidade dos compiladores:
c=getche();
em que c é um inteiro. Esta função permite ler um caracter do teclado,sem necessidade de em seguida se digitar a tecla [ENTER]. O caracter lido é mostrado (ecoado) no ecrâ.
c=getch();
Idêntica à anterior apenas com a diferença de não mostrar o caracter lido no ecrã (stdout). O facto de estas funções não necessitarem que a tecla [ENTER] seja premida, faz com que seja de grande interesse a sua utilização.
Normalmente, é necessário a inclusão da instrução:
#include <conio.h>
para a sua utilização.
|
Back |
Up |
Forward |
|
|
Pages by Nuno Nunes. |
|