Agora que você sabe como funciona o operador de endereço &, posso apresentar a você a função scanf (leia-se scanEFE).
Essa função, como a printf, está localizada na biblioteca stdio.h e serve como entrada de dados em seu programa. Tudo aquilo que você digita no teclado será lido por essa função.
É claro que para o scanf você deverá informar duas coisas:
- Em qual formato o dado será lido?
- Onde ele será armazenado?
Para informar o formato do dado para o scanf é necessário recorrer a tabela abaixo:
| Código | Formatação |
| %c | Lê um caractere |
| %d | Lê um inteiro positivo ou negativo (base decimal) |
| %i | Lê um inteiro positivo ou negativo (base decimal) |
| %e | Lê um número de ponto flutuante em notação científica |
| %f | Lê um número de ponto flutuante |
| %g | Lê um número de ponto flutuante podendo ser expressa em notação científica |
| %o | Lê um número em octal |
| %s | Lê uma cadeia de caracteres (string) |
| %u | Lê um inteiro sem sinal |
| %x | Lê um número hexadecimal |
| %n | Recebe um valor inteiro correspondente ao número de caracteres lidos até então |
| %[] | Busca por um conjunto de caracteres |
A resposta genérica para a segunda pergunta é a memória. Devemos especificar para o scanf qual o endereço de memória ele deve guardar o dado inserido. Para essa operação utiliza-se o operador de endereço &.
A forma geral do scanf é:
scanf("código de formatação", lista de endereços);
Para ler duas variáveis, sexo e anoNascimento podemos fazer como no programa abaixo.
001: #include <stdio.h>
002: #include <stdlib.h>
003:
004: int main(int argc, char *argv[])
005: {
006: char sexo;
007: int anoNascimento;
008: printf("Digite o sexo\n[F] - Feminino\n[M] - Masculino\n");
009: scanf("%c",&sexo);
010: printf("Digite o ano de nascimento: ");
011: scanf("%d",&anoNascimento);
012: system("PAUSE");
013: return 0;
014: }
Note que nas linhas 9 e 11 o código de formatação indica somente o tipo de dado a ser lido.
O scanf permite ler mais de uma variável na mesma instrução. Adaptando o programa acima para ler em apenas uma instrução fica da seguinte forma:
001: #include <stdio.h>
002: #include <stdlib.h>
003:
004: int main(int argc, char *argv[])
005: {
006: char sexo;
007: int anoNascimento;
008: printf("Digite o sexo\n[F] - Feminino\n[M] - Masculino\nEm seguida digite o ano de nascimento.");
009: scanf("%c%d",&sexo, &anoNascimento);
010: system("PAUSE");
011: return 0;
012: }
Particularmente não gosto dessa segunda opção porque não permite a limpeza do buffer do teclado entre uma leitura e outra. A limpeza é importante pois garante que nenhuma sujeira presente no buffer contaminará suas variáveis.
Para fazer a limpeza do buffer basta inserir a instrução
fflush(stdin);
antes de cada scanf.
Veja o primeiro programa escrito de uma forma mais segura.
001: #include <stdio.h>
002: #include <stdlib.h>
003:
004: int main(int argc, char *argv[])
005: {
006: char sexo;
007: int anoNascimento;
008: printf("Digite o sexo\n[F] - Feminino\n[M] - Masculino\n");
009: fflush(stdin);
010: scanf("%c",&sexo);
011: printf("Digite o ano de nascimento: ");
012: fflush(stdin);
013: scanf("%d",&anoNascimento);
014: system("PAUSE");
015: return 0;
016: }
Agora sim, ler dados ficou ainda mais fácil!
0 comentários:
Postar um comentário