Os dispositivos padrão de interação com o usuário são o teclado (dispositivo de entrada padrão) e a tela do monitor (dispositivo de saída padrão). C suporta rotinas para acessar diretamente estes dispositivos.
A rotina básica de entrada de dados lê um caráter do teclado, retornando seu valor ASCII. Esta rotina é
#include <stdio.h> int getchar();A descrição acima deve ser lida da seguinte forma: o arquivo de cabeçalho stdio.h tem que ser incluído no arquivo fonte que for usar esta rotina getchar, e esta rotina não tem nenhum argumento e retorna um valor inteiro.
O seguinte exemplo ilustra o uso de getchar:
#include <stdio.h> main() { int ch; ch=getchar(); printf("valor ASCII de %c = %d (hexa %x)\n", ch, ch, ch); }Este programa, quando executado, irá aguardar que o usuário entre algum caráter via teclado. A saída será uma indicação de qual caráter foi obtido ao longo com seu valor em representação decimal e hexadecimal.
A rotina correspondente a getchar para a apresentação de um caráter na tela é putchar
#include <stdio.h> int putchar(char);
Por exemplo, o programa anterior poderia ser estendido de forma a que um
prompt (tal como >
) indicasse ao usuário que uma entrada de
dados é aguardada:
#include <stdio.h> main() { int ch; putchar('>'); ch=getchar(); printf("valor ASCII de %c = %d (hexa %x)\n", ch, ch, ch); }
É possível entrar uma string a partir do teclado usando a rotina gets,
#include <stdio.h> char *gets(char *);Esta rotina lê uma string do teclado armazenando-o no arranjo de caracteres apontado por seu argumento. A entrada da string é terminada pela tecla ENTER, que é substituído internamente pelo caráter NUL. O valor de retorno é o endereço do argumento se tudo correu bem ou o apontador nulo se houve alguma condição de erro. Por exemplo,
#include <stdio.h> main() { char strch[60]; char *pch; putchar('>'); pch=gets(strch); if (pch != 0) printf("string aceita foi: %s\n", pch); else printf("Erro na obtencao da string!\n"); }
Este programa aceita uma string via teclado, armazenando-a no
arranjo de caracteres strch. Observe que o programador deve
reservar o espaço que será utilizado para guardar a string.
Aceitando a string, esta será ecoado para a tela. Caso
contrário (por exemplo, a entrada é o caráter de fim de arquivo
^D
), a mensagem de erro será apresentada.
A rotina de saída com formatação de valores, printf, já foi apresentada anteriormente. Há também uma rotina para a entrada de dados formatados, que é scanf:
#include <stdio.h> int scanf(char *format, lista_enderecos);O primeiro argumento de scanf é uma string contendo seqüências de conversão de formatos, seguindo o que já foi especificado em printf. Caracteres que não sejam parte de uma seqüência de conversão na string de formato indica entrada que deve ser ignorada. O valor de retorno é o número de conversões realizadas com sucesso.
Por exemplo, para ler um valor inteiro do teclado diretamente para uma variável inteira, o seguinte programa poderia ser usado:
#include <stdio.h> main() { int value; scanf("%d",&value); printf("numero aceito foi: %d\n", value); }Observe que o endereço da variável é o argumento de scanf.