Constantes são rígidas. Eles não mudam. A vida não é assim, e seus programas de teste também não deveriam ser. Se você está aprendendo C, números codificados como 5 e 7 envelhecem rapidamente. Você quer interação. Você quer que o computador espere que você digite algo.
Digite scanf.
É a outra metade da história do printf. Enquanto printf envia dados para a tela, scanf extrai dados do teclado. Não é a ferramenta mais robusta da biblioteca padrão C, mas para uma entrada simples no console, ela realiza o trabalho sem a necessidade de dependência de terceiros.
Veja como você pega um script estático e o torna dinâmico.
O Código
Copie isso. Execute-o. Digite números quando solicitado.
Quebrando scanf
A mágica acontece nestas duas linhas:
scanf("%d", &a);
scanf: O nome da função. Abreviação de “entrada formatada para digitalização”."%d": O especificador de formato. Diz aoscanfpara esperar um número inteiro. Se você estivesse lendo um float, você usaria"%f".&a: Esta é a parte crítica. Você não está passando o valor dea. Você está passando o endereço dea.
Pense desta forma: printf precisa saber o que está dentro da variável. scanf precisa saber onde colocar os dados. O operador & fornece esse endereço de memória. Ignore o e comercial e você travará. Ou pior, você receberá um aviso que parece algo sem sentido e uma variável que não muda.
Como funciona na prática
Ao executar o programa:
- O terminal imprime:
Digite o primeiro valor: - O cursor pisca. Isso espera. Você fica preso aqui até digitar algo e pressionar Enter.
- Você digita
5. Você bateu Enter. scanfpega aquele5, converte a string de caracteres “5” no valor inteiro 5 e armazena-o no endereço de memória&a.- O mesmo loop acontece para o segundo valor.
Depois vem a matemática. c = a + b;. Adição simples.
Finalmente, printf exibe o resultado. Mas observe a string de formato: printf("%d + %d = %d\n", a, b, c);. Você está injetando as variáveis de volta na string. É assim que você cria uma saída legível.
Por que isso é importante
A maioria dos aplicativos modernos não usa entrada de console. Você não digita comandos em uma caixa preta para seu navegador ou editor de fotos. Mas compreender esse fluxo é fundamental.
Entrada -> Processo -> Saída.
Esse é o ciclo básico de todo software. `
Como o scanf lida com endereços de memória
Quando você executa esse código, a diferença entre sucesso e falha no tempo de execução se resume a um caractere. Especificamente, o e comercial (& ) antes das variáveis a e b.
Este é o operador de endereço. Ele informa ao scanf exatamente onde armazenar a entrada que recebe na memória. Sem ele, scanf não sabe a localização da variável. Ele apenas obtém um valor, que é inútil para armazenar dados de volta no programa. Se você omitir, o programa não será compilado ou travará imediatamente após a execução. Você precisa deste operador para char, int, float e tipos de estrutura.
Tente removê-lo. Observe o que acontece. É uma lição dolorosa, mas necessária, sobre como C gerencia a memória.
Dominando a saída printf
printf é a sua janela para o usuário. Ele envia dados para a saída padrão. A versão mais simples é direta.
Isso imprime a palavra Olá. Nada mais. Sem quebra de linha. O cursor fica logo após o ‘o’.
Adicione um caractere de nova linha.
Agora a saída passa para a próxima linha. O \n é um retorno de carro. É essencial para uma saída legível do console.
Variáveis mudam o jogo. Você não pode simplesmente imprimir o nome de uma variável como faz em Python ou JavaScript. Você deve usar um espaço reservado.
O %d é um espaço reservado. Ele é substituído pelo valor inteiro de b em tempo de execução. É assim que C lida com a saída dinâmica.
Você pode misturar texto e variáveis. Uma maneira desajeitada é encadear várias impressões.
Funciona. Também é detalhado. A abordagem mais limpa incorpora tudo em uma string.
Vários valores também funcionam. Basta manter os espaços reservados alinhados com os argumentos.
A ordem é importante. O primeiro %d mapeia para a. O segundo para b. O terceiro para c. Se você trocá-los, a matemática estará errada. Se você perder um, o comportamento será indefinido. O número e o tipo de operadores na string de formato devem corresponder exatamente aos parâmetros.
Espaços reservados específicos do tipo
C é rigoroso quanto aos tipos. Você não pode usar o mesmo espaço reservado para tudo. Você deve corresponder o tipo de dados ao especificador de formato.
- Use %d para int (valores inteiros).
- Use %f para float (números de ponto flutuante).
- Use %c para char (caracteres únicos).
- Use %s para sequências de caracteres (matrizes de caracteres).
Se você usar %d para um float, você obterá uma saída lixo. Se você usar %s para um int, o programa provavelmente travará. A precisão não é opcional aqui.
Para obter detalhes mais profundos sobre esses especificadores, consulte o manual do UNIX. Digite man 3 printf. Outros compiladores fornecem documentação semelhante. Vale a pena ler.
Armadilhas comuns a serem evitadas
Compiladores C são úteis, mas não são leitores de mentes. Você cometerá erros. Veja como evitar os mais comuns.
- Diferenciação de maiúsculas e minúsculas : C diferencia maiúsculas de minúsculas.
PrintfouPRINTFfalhará. Deve serprintf. O mesmo se aplica a nomes de variáveis e chamadas de funções. - Falta o operador de endereço : Esquecer o
&emscanfé um erro frequente. Isso causa falha imediata no tempo de execução. Sempre inclua-o para tipos primitivos. - Parâmetros incompatíveis : Muitos ou poucos argumentos em
printfouscanflevam a erros. A string de formato determina a estrutura. Atenha-se a isso. - Variáveis não declaradas : Você deve declarar uma variável antes de usá-la. C não infere tipos. Você define
int a;antes de imprimira.
Esses erros são repetitivos. Eles também são fáceis de corrigir quando você reconhece o padrão.





























