Pplware

Vamos Programar? – Introdução à Programação #22

Um pouco mais sobre a função scanf e algumas dicas

O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécie Humana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”, “mudança”, “futuro”.

A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.

introprog22

O artigo de hoje irá incidir sobre algumas sugestões a referir dadas por leitores no artigo da semana passada, mas também iremos começar a abordar outro tópico.

Limpeza do buffer

No artigo número nove da presente saga introduzimos as seguintes funções:

_fpurge();
fflush();

Ambas as funções permitem-nos limpar o buffer de entrada, porém não são muito seguras. Em programação profissional de C (e outras linguagens), estas funções não são utilizadas por motivos de segurança.

Claro que existem “soluções” alternativas. O leitor José Carlos Ferreira, no artigo da semana anterior, sugeriu-nos o seguinte:

#define CLEAR_INPUT while (!getchar ())

O que nos permite utilizar o trecho de código:

while (!getchar ())

Recorrendo apenas ao nome “CLEAR_INPUT”.

Alternativa a gets e a scanf

Devido à falta de uma solução efetiva ao problema existente com a função scanf e à existência de alguns contra-tempos com a função gets foi sugerido, pelos leitores Zé e lmx a utilização da função fgets.

Sintaxe

Esta função tem algumas diferenças relativamente às funções mencionadas no título. Ora veja a sintaxe:

fgets(char *str, int n, FILE *stream);

Onde:

Exemplo

Vejamos então um exemplo baseado no boletim de informação criado no artigo anterior.

#include 
#include 

int main()
{
    char nome[21],
        apelido[21],
        morada[51],
        codigoPostal[11];

    printf("Por favor insira os seus dados conforme pedido:\n\n");
    printf("Primeiro nome: ");
    fgets(nome, 21, stdin);

    printf("Último nome: ");
    fgets(apelido, 21, stdin);

    printf("Morada: ");
    fgets(morada, 51, stdin);

    printf("Código Postal: ");
    fgets(codigoPostal, 11, stdin);

    printf("\nO seu Cartão de Identificação:\n");
    printf("Nome: %s, %s\n", apelido, nome);
    printf("Morada: %s\n", morada);
    printf("Código Postal: %s\n", codigoPostal);
    return 0;
}

Remoção das Mudanças de Linha

Mas, se corrermos o código acima, iremos receber algo parecido com o seguinte:

O seu Cartão de Identificação:
Nome: Apelido
, Nome

Morada: Morada

Código Postal: CP

Como pode verificar, isto mostra que os arrays ficaram, também com os delimitadores da mudança de linha (“\n”). Para removermos estes delimitadores podemos recorrer à função “strtok”.

Sintaxe

Ora veja a sintaxe desta função.

strtok(char *str, const char *delim);

Onde:

Exemplo

Então, para que o exemplo acima imprima corretamente o Bilhete de Informação, devem ser adicionadas as seguintes linhas antes de ser imprimida qualquer informação:

strtok(nome, "\n");
strtok(apelido, "\n");
strtok(morada, "\n");
strtok(codigoPostal, "\n");

Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode sempre utilizar os comentários para colocar a questão. Caso o faça,  pedimos que utilize a keyword [DUVIDA] no início do seu comentários.

Resoluções de exercícios.

Esta saga

Henrique Dias

Mais episódios:  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13][12] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23][24]

Exit mobile version