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.