A função scanf - recebendo números do usuário

Até o momento, os artigos de nosso curso C Progressivo tem mostrado diversos programas, porém todos estáticos, sem controle e sem interação.
O programa simplesmente roda e mostra coisas na tela.

Porém, na vida real não é assim. Praticamente todos possuem algum tipo de interação com o usuário: recebem dados, cliques, arrastamos e soltamos etc.

Nessa lição iremos aprender a usar a função scanf e obter dados do usuário.
Vamos começar a 'conversar' com o computador.

Recebendo números inteiros com a função scanf

Assim como fizemos para trabalhar com inteiros na função printf, vamos usar novamente o símbolo %d para representar os int.

Suponho que queiramos pedir um inteiro ao usuário, primeiro temos que declarar um inteiro. Vamos supor um de nome 'numero'.
Para o usuário armazenar um número nessa variável 'numero', usamos a seguinte sintaxe:

scanf("%d", &numero);

Essa função nos diz "armazene na variável 'numero' um inteiro".
O erro mais comum é esquecer o &, cuidado!

Por exemplo, vamos escrever um programa em C que pede um número ao usuário e o mostra na tela:

#include <stdio.h>

int main()
{
    int numero;
    printf("Digite um numero: ");
    scanf("%d", &numero);

    printf("O numero digitado foi: %d", numero);
}


Exemplo de código- Como usar a função scanf()


Escreva um programa em C que peça dois números inteiros e mostre sua soma.
Primeiro criamos três variáveis inteiras: num1, num2 e resultado.
Essas variáveis que vão armazenar os números que o usuário fornecer e o resultado da soma.

Após isso, usamos a função scanf() para pegar do usuário os dois número.
Em seguida, armazenamos a soma desses números na variável 'resultado', e exibimos essa variável num printf.

Veja como ficou o nosso código em C:


#include <stdio.h>

int main()
{
    int num1, num2, resultado;
    printf("Digite um numero: ");
    scanf("%d", &num1);

    printf("Digite outro numero: ");
    scanf("%d", &num2);

    resultado = num1 + num2;

    printf("%d + %d = %d", num1,num2,resultado);
}




Recebendo mais de um número dentro de uma única scanf

Para evitar o trabalho de ter que escrever a scanf cada vez que você deseje receber um número do usuário, você pode colocar mais de um %d dentro do escopo da scanf.

#include <stdio.h>

int main()
{
    int num1, num2;

    printf("Insira dois numeros: ");
    scanf("%d %d", &num1, &num2);

    printf("Você digitou: '%d' e '%d'", num1, num2);
}

No caso acima, num1 vai ser o número que você digitou antes de dar enter, espaço ou tab.
E num2 sera o número que você digitou após dar enter, espaço ou tab


Exercício: Faça um programa que peça dois inteiros ao usuário e que mostre a diferença (subtração) entre o primeiro e segundo número.


Recebendo números reais ou decimais com a função scanf

Para receber números do tipo float ou double, fazemos exatamente como na seção anterior, sobre inteiros, somente com uma diferença que talvez você já saiba qual é: usamos %f ao invés de %d.
Faz todo sentido, não?

Exemplo: Crie um programa em C que peça dois números decimais ao usuário e mostre o produto deles, com precisão de dois números.

Lembrando que o símbolo de multiplicação é o asterisco, *:

#include <stdio.h>

int main()
{
    float num1, num2, resultado;
    printf("Digite um numero: ");
    scanf("%f", &num1);

    printf("Digite outro numero: ");
    scanf("%f", &num2);

    resultado = num1 * num2;

    printf("%.1f + %.1f = %.2f", num1,num2,resultado);
}



Exercício: Faça um programa em C que peça dois números do tipo double ao usuário e mostre o resultado da divisão do primeiro pelo segundo e exiba esse resultado com 3 casas decimais.
PS: o símbolo de divisão é /

24 comentários:

Herbert Fortes disse...

Olá,

substituindo float por double para o execício não funciona. scanf não armazena o número digitado.

Por que?

breno_ferraro disse...

Olá, estou com um problema,
se eu quiser no lugar da operação colocar uma variável, tem como ?
Ex:
#include

int main()
{
int num1, num2, resultado;
char oper;
printf("Digite um numero: ");
scanf("%d", &num1);

printf("Digite uma operação (*+-/): ");
scanf("%c", &oper);

printf("Digite outro numero: ");
scanf("%d", &num2);

resultado = num1 oper num2;

printf("%d %c %d = %d", num1,oper,num2,resultado);
}
Obrigado por seus tutoriais

Ronald Pedra disse...

Adicione um l na frente de f de %f e conseguirá pegar a variável double:

...
scanf("%lf", &num1);
...

fonte:
http://stackoverflow.com/questions/210590/why-does-scanf-need-lf-for-doubles-when-printf-is-okay-with-just-f

Equipes disse...

int main()
{
int num1, num2, resultado;
char oper;
printf("Digite um numero: ");
scanf("%d", &num1);

printf("Digite uma operação (*+-/): ");
scanf("%c", &oper);

printf("Digite outro numero: ");
scanf("%d", &num2);

resultado = num1 oper num2;

printf("%d %c %d = %d", num1,oper,num2,resultado);
}

executa assim;
int main()
{
int num1, num2, resultado;
char oper;
printf("Digite um numero: ");
scanf("%d", &num1);

printf("Digite uma operação (*+-/): ");
scanf("%c", &oper);

printf("Digite outro numero: ");
scanf("%d", &num2);

if(oper = '+'){
resultado = num1 + num2;
}
else
printf("operador invalido!\n ");

printf("%d %c %d = %d", num1,oper,num2,resultado);
}

Beto Silva disse...

Fiz o código assim e o resultado sai errado:

int main(void)
{

int numero1, numero2, resultado;
resultado = numero1 + numero2;
printf("escreva dois numeros para somar \n");
scanf("%d", &numero1);
scanf("%d", &numero2);
printf("o resultado e %d", resultado);

return 0;


}


o que há de errado?

Beto Silva disse...

Olá, identifiquei o erro. Mas poderia explicar porque a diferença??

Fiz o exercício de subtrair os números, vejamos:

comentários no código!

#include

int main(void)
{

int num1, num2, resultado;
resultado = num1 - num2; /*declarei o calculo de "resultado" aqui e
o resultado sai um numero estranho (-401232, por exemplo) */

printf("Subtraia dois numeros!\n\n");
printf("Digite o primeiro: ");
scanf("%d", &num1);
printf("O segundo: ");
scanf("%d", &num2);

printf("A sobra dos numeros e %d", resultado);
return 0;



}



Desta maneira, funciona normal:

#include

int main(void)
{

int num1, num2, resultado;

printf("Subtraia dois numeros!\n\n");
printf("Digite o primeiro: ");
scanf("%d", &num1);
printf("O segundo: ");
scanf("%d", &num2);

resultado = num1 - num2; /* movendo para cá tudo funciona lindo
e maravilhoso*/
printf("A sobra dos numeros e %d", resultado);
return 0;



}


Natan Santos disse...

fiz meu programa de divisão, mas esta dando um erro em que o resultado aparece 0.00...

#include

int main (){
double num1;
double num2;
double result;

printf("\ninforme o primeiro numero, por favor\n\n");
scanf("%f",&num1);

printf("\ninforme o segundo numero, por favor\n\n");
scanf("%f",&num2);

result=num1/num2;

printf("\no resultado da divisao desses dois numeros eh %f\n\n",result);
system("pause");
return 0;
}

Mayron Sousa disse...

ótimo site, sou iniciante na linguagem c e estou contente em encontrar esse site com ótima qualidade de ensino sobre essa linguagem .

estou com um problema com relação ao exercicio de divisão
eu fiz e ficou assim:
int main (void)
{
double num1,num2,resultado;
printf("Digite o primeiro valor:");
scanf("%f",&num1);
printf("Digite o segundo valor:");
scanf("%f",&num2);
resultado= num1 / num2;
printf("o resultado sera de: %.2f",resultado);



}

o problema é que o resultado sempre sai 0.59 independente dos valores divididos , poderia mostrar-me o erro e explicar?

att.

José Renato do Guanor disse...

faça assim que também da certo:

#include

int main()
{
double n1,n2;
printf ("digite dois numeros: ");
scanf ("%lf %lf",&n1, &n2); // Para armazenar um numero do tipo double é necessário colocar um 'l' antes do 'f'
printf("%.3f / %.3f = %.3f", n1,n2,n1/n2);
getchar;
return 0;
}

Anônimo disse...

Olá, em primeiro lugar gostaria de parabenizar o tutorial, estou aprendendo muito. Não é aqueles tutoriais chatos que estamos acostumados a encontrar na Net. Bem, com relação ao exercício de divisão eu fiz porém o resultado não é o esperado com o tipo double. Com float funciona. Poderia nos dar uma força nessa resposta ?

Abraços e obrigado.

Anônimo disse...

Primeiramente gostaria de parabenizar o blog, e seu material e sua dedicação é espetacular!!!
Sou iniciante em C também, mas por favor me corruga se eu disser asneira, no código do Natan Santos ele esta usando uma palavra reservada como variável..(result).

Anônimo disse...

Crie um algoritmo que leia dois números, e em seguida exiba na tela uma
mensagem dizendo se o maior deles é o primeiro, o segundo, ou se são
iguais.

como e q eu faço isso no dev c++

Anônimo disse...

O meu funciona normalmente, mas o resultado não aparece! Por exemplo .. depois q a conta é feita aparece como resultado o seguinte sinal (|-@:) pq n aparece os numeros?




int numero, numero2,resultado;
printf ("Digite o primeiro numero para soma!: \n");
scanf ("%d",&numero);
printf ("Digite o segundo numero para soma!: \n");
scanf ("%d",&numero2);

resultado = numero+numero2;

printf ("O resultado da soma é: \n",resultado);

Anônimo disse...

#include

int main()
{
float num1, num2, resultado;
printf("Digite um numero: ");
scanf("%f", &num1);

printf("Digite outro numero: ");
scanf("%f", &num2);

resultado = num1 * num2;

printf("%.1f + %.1f = %.2f", num1,num2,resultado);
}

No último printf não seria * no lugar de +

Anônimo disse...

Bom galara, depois de colocar 'l' entre %f o meu exercício da divisão funcionou, e ficou assim:
#include
int main()
{
double num1, num2, resultado;
printf("Vamos fazer uma subtracao, digite dois numeros:\n");
scanf("%lf %lf",&num1, &num2);

resultado = num1 / num2;
printf("%f + %f = %.3f", num1, num2, resultado);

}

Valdeci santos de miranda disse...


#include

int main()
{
int num1, num2; //Variaveis de valor deutro ou variaveis de registro
double resultado;

printf("Digite dois numeros: "); //Entrada de dados
scanf("%d %d", &num1, &num2);
printf("Os numeros digitados foram: %d e %d \n", num1, num2); //Saida de dados

float num3, num4; //Variaveis de valor deutro ou de ocupação, tanto faz.

printf("Digite dois numeros\(Decimais\): "); //Entrada de dados
scanf("%f %f", &num3, &num4);
printf("Os numeros decimais digitados foram %f e também %f \n", num3, num4); //Saida de dados

resultado = num1 + num2 * num3 / num4; //Calculo do resultado
printf("%d + %d * %f / %f = %f ", num1, num2, num3, num4, resultado) ; //Saida de dados final, ou resultado do calculo.

return(0);
}

Felipe Toledo disse...

Aê galera, fiz um simples boletin, e funciono perfeito :p

#include

int main()
{
float nota1, nota2, nota3, nota4, media;
printf("Digite a nota do primeiro bimestre: ");
scanf("%f", &nota1);

printf("Digite a nota do segundo bimestre: ");
scanf("%f", &nota2);

printf("Digite a nota do terceiro bimestre: ");
scanf("%f", &nota3);

printf("Digite a nota do quarto bimestre: ");
scanf("%f", &nota4);

media = (nota1 + nota2 + nota3 + nota4)/4;

printf("A sua média final foi de %.2f", media);
}

Ciro Fonseca disse...

#include

int main()

{
double num1, num2, result;
num1=0;
num2=0;

printf("Digite o primeiro numero: ");
scanf("%lf", &num1);

printf("Digite o segundo numero: ");
scanf("%lf", &num2);

result = num1/num2;

printf("\nA divisao entre %.2lf e %.2lf e: %.2lf",num1,num2,result);
}

Fiz assim, com lf%, pois utilizando somente o %f não é possivel armazenar o valor na variavel.

Lucas Alencar disse...

Alguém pode me ajudar? só estou conseguindo declarar a primeira variável.
#include
int main ()
{
int idade[2];
float altura[4], peso[5];
char nome[50], telefone[15];

printf("Informe o nome: ");
scanf("%c", &nome);

printf("Informe a idade: ");
scanf("%d", &idade);

printf("Informe a altura: ");
scanf("%f", &altura);

printf("Informar o peso: ");
scanf("%f", &peso);

printf("Informe o telefone: ");
scanf("%c", &telefone);

printf("O nome informado é: %c ", nome);
printf("A idade informada é: %d ", idade);
printf("A altura informada é: %f\n ", altura);
printf("O peso informado é: %f\n ", peso);
printf("O telefone informado é: %c ", telefone);
}

dicas de tudo e mais um pouco... disse...

Parabéns ao amigo que deu dica com "LF" (no caso de Double), caso usarem "float" não dá erro, obrigado.

Anônimo disse...

Ola Pessoal,

Sou muito Leigo no assunto tentando finalizar o programa abaixo e não encontro o erro de jeito nenhum, alguém pode me ajudar por favor?

#include
#include
Main()
{
Float num1, num2;
Printf(“digite um numero\n”);
Scanf(“%f”,&num1, &num2);
Printf(“digite outro numero\n”);
Scanf(“%f”,&num2);
Printf(“=%f”,num1+num2);
Printf(“=%f”,num1-num2);
Printf(“=%f”,num1*num2);
Printf(“=%f”,num1/num2);
}

Mayara Lucyanne disse...

Olá, só uma pequena correção. No último exemplo o o que imprime na tela é:
printf("%.1f + %.1f = %.2f", num1,num2,resultado);
quando deveria ser:
printf("%.1f * %.1f = %.2f", num1,num2,resultado);
Só uma troca de sinais que, neste caso, nem altera o resultado só o que é impresso mesmo.

Anônimo disse...

Não sei o que eu faria se não fosse esse site, vlw mesmo, estou aprendendo muito aqui.
Quando eu começar a trabalhar, SE ainda o site estiver ativo, eu vou fazer uma doação.

Curso C Progressivo disse...

Olá anônimo, continua na ativa sim, ainda pagamos domínio, servidor etc pra manter o site na ativa (por isso, qualquer doação é sempre bem vinda rs).

Mas os leitores não precisam se preocupar com conteúdo 'atual', a linguagem C é a mesma desde a década de 60, está tão impregnada em absolutamente tudo, em toda a tecnologia, que é impossível que ela seja alterada.

Podem continuar estudando, que os conhecimentos valem pra hoje, pra daqui 5, 10, 20, 50 anos...e estamos trabalhando em outros sites, outras linguagens, tudo aos mesmos moldes, gratuito, sem cadastro e livre para todos.

Gostou desse tutorial de C?
Sabia que o acervo do portal C Progressivo é o mesmo, ou maior que, de um livro ou curso presencial?
E o melhor: totalmente gratuito.

Mas para nosso projeto se manter é preciso divulgação.
Para isso, basta curtir nossa página no Facebook e/ou clicar no botão +1 do Google.
Contamos e precisamos de seu apoio.