See the C
  • Intro
    • Prefácio
      • A Jornada
      • A organização dos estudos
      • Guia de contribuições
  • Capítulo 1: Basic
    • Introdução a Linguagem C
      • Uma Jornada pela Computação com bit e byte
      • Fluxograma
      • Algoritmos?
      • Ciclo de Desenvolvimento
      • Compreendendo variáveis
      • Tipos de dados
      • Comentários
      • Ordem de precedência dos operadores
      • Operadores aritméticos
      • Operadores relacionais e lógicos
      • Operadores de atribuição Compostos
      • Função
      • Especificadores de formato
    • Capítulo 1: Exercícios
      • Operações Matemáticas Simples
      • Cálculo de Média Aritmética
      • Conversão de Temperatura
      • Entrada e Saída de dados Simples
      • Cálculo de Percentual de Votos em uma Eleição Municipal
      • Cálculo de Novo Salário com Reajuste
      • Jogo de Adivinhação Simples
  • Capítulo 1: RE
    • Operações Matemáticas Simples
    • Cálculo de Média Aritmética
  • Capítulo 2: Control Flow
    • Estruturas condicionais
      • Entender loops
  • Capítulo 2: Exercícios
    • Calculadora de Notas
    • Verificação de Paridade de um Número
    • Conversor de Temperatura Inteligente
    • Dias da Semana
    • Calculadora Simples
    • Conversor de Unidades
  • Capítulo 3: Functions
    • Funções - Uma abordagem abrangente
Fornecido por GitBook
Nesta página
  • Leitura de dados
  • scanf
  • As Desvantanges do scanf
Editar no GitHub
  1. Capítulo 3: Functions

Funções - Uma abordagem abrangente

Como já soubemos que na programação funções são blocos de código reutilizáveis que ajudam a organizar um programa e evitar repetição de código.

Ao invés de repetirmos o mesmo código várias e várias vezes, você pode escrever uma função e simplesmente chamá-la sempre que precisar. Quando a sua estrutura foi explicada anteriormente de uma forma bastante simples e resumida, agora vamos aprender outros tipos de funções podemos chamar-los de .

Leitura de dados


A função scanf certamente é uma das principais funções de entrada em C, utilizada para leitura de dados do usuário a partir do teclado. Permite que você capture diferentes tipos de dados, como inteiros, floats, caracteres e strings. O padrão C11 (2011) trouxe uma versão alternativa e mais segura da função scanf o scanf_s com ela mais bibliotecas C seguras como , embora adiciona segurança, mas é exclusivo para Windows.

O introduziu funções seguras que possuem um _s no final no entanto muitos dos recursos adicionados foram para mitigar os problemas de segurança associados ao scanf tradicional, como vimos mais acima esta solução não está disponível em todos os ambientes de desenvolvimento o suporte real pode ser vista muitas vezes no compilador da Microsoft.

A pouca adoção de outros compiladores incluindo GCC e Clang por acreditar que ele não resolve completamente os problemas de segurança. Ainda se diz que Annex K não respeitou a filosofia do C que foi projetado para ser minimalista e portável. O Annex K adiciona muita complexidade, o que não é bem-visto pela comunidade e amantes da linguagem.


scanf

A função scanf é uma ferramenta poderosa na linguagem C para receber entradas do usuário ao lado de outras funções como fgets(). Aqui estão algumas das principais vantagens de seu uso:

1. Leitura de Dados Formatada

  • A função scanf permite que leia dados de forma formatada, especificando o tipo de dados que espera receber (como inteiros, floats, strings, etc.). Isso ajuda a garantir que os dados sejam interpretados corretamente.

2. Interatividade

  • scanf permite que os programas interajam com os usuários, solicitando entradas pelo teclado Algo super essencial para muitos softwares que dependem de entradas de dados dinâmicos fornecidos pelo usuário.

3. Flexibilidade

  • scanf retorna o número de itens lidos com sucesso, permitindo que você verifique se a entrada foi processada corretamente. Isso é útil para implementar verificações de erro e garantir que o programa não falhe devido a entradas inválidas.

4. Controle de Erros

  • O scanf pode ler múltiplos valores em uma única chamada, o que a torna eficiente para capturar várias entradas de uma só vez. Por exemplo, você pode ler um inteiro e um float em uma única linha de entrada.

As Desvantanges do scanf

Embora a função scanf seja amplamente utilizada para entrada de dados em C, ela possui algumas desvantagens que podem impactar a segurança e a robustez do seu código. Aqui estão algumas das principais desvantagens:

1. Falta de Verificação de Limites

  • scanf não verifica o tamanho do buffer ao ler strings. Isso pode levar ao que chamos de buffer overflow, onde dados são escritos além dos limites da memória alocada, resultando em comportamento indefinido ou vulnerabilidades de segurança.

2. Dificuldade em Ler Linhas Inteiras

  • scanf não é ideal para ler linhas inteiras de texto, peca bastante neste quesito especialmente se houver espaços em branco. Para isso é melhor usar funções como fgets, que podem lidar melhor com entradas de texto.

3. Dependência de Espaços em Branco

  • scanf ignora espaços em branco, o que pode causar problemas ao ler múltiplos valores em uma única linha. O que pode levar a confusões se o usuário não inserir os dados exatamente como esperado.


Vamos fazer um conjunto de bricandeiras com a funções scanf e print .


#include <stdio.h>

int main()
{
    char name[20];
    int age;

    printf("Digite seu nome: ");
    scanf("%s", name);
    printf("Digite sua idade: ");
    scanf("%d", &age);
    printf("Seu nome: %s, Sua idade: %d anos\n", name, age);
    printf("Obrigado por informar \n");

    return 0;
}

Terminal

Digite seu nome: Andre Digite sua idade: 12

Seu nome: Andre, Sua idade: 12 anos

AnteriorConversor de Unidades

Atualizado há 2 meses