Quase todo algoritmo terá, em algum momento, interação com o usuário. Esta interação se dará normalmente por meio da impressão de dados na tela e da leitura de dados a partir do teclado. Assim, é de fundamental importância entender de fato como utilizar corretamente as instruções de entrada e saída de dados.
Instrução de saída
A instrução de saída é utilizada sempre que desejamos apresentar alguma informação para o usuário, por isso instrução de saída. Alguma informação está saindo do computador, sendo impressa na tela, para que o usuário tome conhecimento.
Na linguagem de programação C a instrução de saída que veremos é a instrução printf(), apresentada no trecho de código a seguir:
#include <stdio.h>
#include <stdlib.h>
void main() {
printf("Esta mensagem será impressa na tela.\n");
}
Tudo que está entre as aspas duplas é entendido como texto e será impresso na tela. O “n” após o ponto final é um marcador especial para saltar uma linha. Dessa forma, a instrução printf() pode ser utilizada para a impressão de menus, como apresentado a seguir:
#include <stdio.h>
#include <stdlib.h>
void main() {
printf("\t=================================\n");
printf("\t1 - Somar 2 - Subtrair 0 - Sair\n");
printf("\t=================================\n");
printf("\n\n");
printf("\t=================================\n\t1 - Somar 2 - Subtrair 0 - Sair\n\t=================================\n");
}
Perceba que as três primeiras instruções printf() são utilizadas em conjunto, imprimindo um menu entre duas linhas tracejadas, enquanto a última instrução printf() produz o mesmo resultado fazendo uso de apenas uma instrução printf() e os marcadores “n” para saltar uma linha e “t” para tabulação (espaço a esquerda).
O resultado final é apresentado na figura a seguir.

Comandos de saída também são úteis quando desejamos imprimir na tela o valor de variáveis. Para isso devemos utilizar marcadores especial na posição em que desejamos que o valor da variável seja impresso. A seguir listamos os marcadores para os principais tipos de dados:
%c → char // caracteres %d → int // números inteiros %f → float // números reais %lf → double // números reais com dupla precisão %llf → long double // números reais longos
Para imprimir os valores de variáveis, além de utilizar o marcador de tipo, também é necessário acrescentar o nome da variável dentro da instrução printf(), como apresentado no código a seguir. Perceba que podem ser utilizados várias instruções printf() ou apenas uma, juntando todas as informações.
#include <stdio.h>
#include <stdlib.h>
void main() {
char letra = 'W';
short num1 = 5;
int num2 = 10;
float num3 = 3.1415;
double num4 = 5.47;
long double num5 = 10.43875;
printf("Letra %c\n", letra);
printf("Valor num1: %d\n", num1);
printf("Valor num2: %d\n", num2);
printf("Valor num3: %f\n", num3);
printf("Valor num4: %lf\n", num4);
printf("Valor num5: %llf\n", num5);
printf("\n");
printf("Letra %c\nValor num1: %d\nValor num2: %d\nValor num3: %f\nValor num4: %lf\nValor num5: %llf\n", letra, num1, num2, num3, num4, num5);
}
O resultado é apresentado na figura a seguir:

Observe que as variáveis foram inicializadas com valores diretamente no código. Caso queiramos que o usuário digite as informações por meio do teclado, precisamos então fazer uso de um comando de entrada. Comando de entrada, pois dados serão digitados no teclado e “entrarão” no computador a fim de serem processados.
Lendo caracteres
Apesar da maioria das vezes a instrução de entrada scanf() ser utilizada, vale ressaltar que existem outras. No trecho de código a seguir apresentamos três formas diferentes para realizar a leitura de caracteres.
1 – getchar()
Ao pressionar qualquer tecla do teclado, o caractere correspondente é armazenado em uma região especial de memória chamada de buffer do teclado. Quando a tecla ENTER é pressionada, a função getchar() retorna o primeiro caractere presente no buffer do teclado. A variável à esquerda receberá então este caractere.
Contudo, a tecla ENTER também é um caractere, por isso precisamos remover ele do buffer do teclado para ler um segundo caractere corretamente. Por isso fazemos a leitura de um segundo caractere na linha 11 e não atribuímos a nenhuma variável. Na verdade, o caractere que está sendo lido é o caractere que representa a tecla ENTER, limpando assim o buffer do teclado.
2 – getc()
Assim como a anterior, esta função lê e retorna um caractere. A diferença é que ela recebe um parâmetro que diz para a função de onde deve ser lido esse caractere. Como queremos ler do buffer do teclado, então utilizamos como parâmetro a palavra reservada “stdin” que faz referência ao teclado do computador.
Assim como no caso anterior, a variável que estiver à esquerda receberá o caractere lido e o buffer do teclado pode ser limpo lendo outro caractere, como feito na linha 16, removendo assim o caractere referente a tecla ENTER.
3 – scanf()
Esta é a instrução de entrada mais utilizada devido sua flexibilidade. Ela não é uma função, logo não retorna nenhum valor. Recebe como parâmetro dois elementos: o primeiro, dentro de aspas duplas, representa o tipo de dado que será lido, neste caso %c, pois iremos ler um caractere; o segundo é o endereço de memória onde deve salvar o caractere lido. Na linguagem C podemos obter o endereço de memória de uma variável utilizando o & (e comercial) antes de seu nome, como feito na linha 19.
Assim como nos casos anteriores, podemos utilizar scanf() também para remover o ENTER do buffer do teclado, como feito na linha 21. O asterisco significa que deve ser removido do buffer o próximo caractere, independente de qual seja.
#include <stdio.h>
#include <stdlib.h>
void main() {
char letra1, letra2, letra3;
printf("Digite uma letra: ");
letra1 = getchar();
printf("Letra digitada: %c\n", letra1);
getchar();
printf("\nDigite uma segunda letra: ");
letra2 = getc(stdin);
printf("Letra digitada: %c\n", letra2);
getc(stdin);
printf("\nDigite uma terceira letra: ");
scanf("%c", &letra3);
printf("Letra digitada: %c\n", letra3);
scanf("%*c");
}
Lendo números
Devido sua flexibilidade, a instrução scanf() é utilizada para a leitura de números em geral, bastando informar corretamente qual o tipo de número será lido, como apresentado no trecho de código a seguir.
#include <stdio.h>
#include <stdlib.h>
void main() {
short num1;
int num2;
float num3;
double num4;
printf("Digite um valor pequeno: ");
scanf("%d", &num1);
printf("Valor lido: %d\n\n", num1);
printf("Digite um valor inteiro: ");
scanf("%d", &num2);
printf("Valor lido: %d\n\n", num2);
printf("Digite um valor real: ");
scanf("%f", &num3);
printf("Valor lido: %f\n\n", num3);
printf("Digite um valor real longo: ");
scanf("%lf", &num4);
printf("Valor lido: %lf\n\n", num4);
}
A instrução scanf() também suporta a leitura de vários dados de uma única vez, como apresentado no trecho de código a seguir.
#include <stdio.h>
#include <stdlib.h>
void main() {
short num1;
int num2;
float num3;
double num4;
printf("Digite um short, um int, um float e um double: ");
scanf("%d%d%f%lf", &num1, &num2, &num3, &num4);
printf("Valores digitados:\nshort: %d\nint: %d\nfloat: %f\ndouble: %lf\n\n", num1, num2, num3, num4);
}
Se ficou alguma dúvida, compartilhe nos comentários que faremos o possível para esclarecer. Um grande abraço, bons estudos e até o próximo.
