TransWikia.com

Ler um numero começando com 0

Stack Overflow em Português Asked by Fábio Morais on January 27, 2021

Estou a ter uns problemas a ler um numero inicializado com long long

long long valid;
scanf("%lli", &valid);

INPUT:

025


A variavel valid vai ter como conteúdo 21 e não 25

Se eu mudar de %lli para %llu isso já corrige o problema, mas não percebo o porquê, aliás, ao usar %llu deveria de ser para unsigned long long e não para long long.

  • Como corrigir isso? Terei obrigatoriamente de mudar para %llu ?

  • Porque acontece isso quando escrevemos um numero começando com 0?

Código no Ideone

One Answer

Se quiser ignorar o zero deve ler de forma obrigatoriamente decimal, e isto se dá usado o %d, e por ser um long long de ser %lld:

#include <stdio.h>

int main(void) {
    long long valid;
    scanf("%lld", &valid);
    printf("%lld", valid);
}

Veja funcionando no ideone. E no repl.it. Também coloquei no GitHub para referência futura.

O %lli diz que quer um número, não importa a notação digitada, e quando começa com zero ele entende que é octal. Em quase todos os casos o %i é erro.

Mas se quer o 0 mesmo antes mesmo aí é diferente.

Vou repetir mais um vez, número é número. Então a matemática define que zero à esquerda não tem significado, por isso ele é ignorado.

Se deseja ler um zero à esquerda de forma significativa não está querendo ler um número, está querendo ler um texto que possui dígitos numéricos. São conceitos completamente diferentes. Se deseja isto mesmo, então mande ler um char * com %s, aí pode por 0 onde quiser.

Documentação.

Correct answer by Maniero on January 27, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP