Ir ao conteúdo
  • Cadastre-se
kamiLuke12

C O que significa %d%*c

Recommended Posts

Pessoal antes de tudo eu sou novo em programação... Em um código em C qualquer  eu vi no scanf (scanf("%d%*c", &vetDigitado);), e gostaria pra que serve %d%*c

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

@kamiLuke12 Olá. Se é novo em programação eu vejo q é uma ótima ocasião p já entender a respeito da importância d se limpar o stdin (entenda como limpar a sujeira buffer)

O que o comando %*c faz é ler um caractere e descartá-lo.

Por exemplo, se você fizer isso:

printf("Digite um caractere: ");
scanf("%c", &caractere);

O que vai acontecer é q o caractere q o usuário digitar vai ser lido pelo scanf e armazenado na variável caractere (segundo esse exempo). Porém, se você fizer isso:

printf("Digite um caractere: ");
scanf("%*c", &caractere);

O que vai acontecer é q o scanf vai ler o caractere digitado pelo usuário e descartá-lo. Experimenta fazer o teste aí

Do modo como está o enunciado não tem como saber o q era preciso digitar, mas, se era apenas para digitar um valor do tipo int, como o %d será lido esse valor (número inteiro),  então esse comando %*c seria p ler algum caractere q entrou no buffer (provavelmente o '\n' ao se dar um ENTER)  e assim limpar a sujeira do buffer

Para entender melhor essa questão recomendo esse vídeo:

https://programacaodescomplicada.wordpress.com/?s=buffer&submit=

Obs: Só q a dica dada nesse vídeo para limpar a sujeira do buffer não é recomendada

Inclusive, a gente (eu pelo menos), faço muito o uso de uma função para limpar a sujeira no buffer, que seria essa:

void limpa_linha() {
    scanf("%*[^\n]");   // aqui vai ler lido qualquer lixo do buffer q houver exceto o '\n'
    scanf("%*c");    // aqui vai ser lido o '\n' que é gerado ao se dar um ENTER e vai descatá-lo
}

Só que não esse comando %*c não é usado apenas para isso. Veja esse exemplo:

printf("Digite a data atual no formato dd/mm/aaaa: ");
scanf("%d%*c%d%*c%d", &dia, &mes, &ano);

Aqui é colocado o %*c propositalmente para ler um caractere também e descartá-lo. Logo, se o usuário digitar 26/08/2018 vai se lido o dia = 26 e armazenado na variável dia, depois o caractere ' / ' e vai ser descartado, depois o mes = 08 e armazenado na variável mes, novamente o caractere ' / ' e descartar e em seguida o ano = 2018. Deu para entender essa lógica? 

Sendo sincero p mim é mais fácil mostrar em código do q explicar, mas mesmo assim arrisquei e se conseguiu entender o q quis passar maravilha!

Se ainda tiver dúvidas é só perguntar.

Devo adiantar q seria importante entender desde já a respeito de sujeira no buffer e desse %*c logo agora q está começando a programar. Por isso, não exite em perguntar caso inda tiver dúvida, ok?

  • Amei 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×