Ir ao conteúdo
  • Cadastre-se

Fscanf() não lê o inteiro 0 no começo do arquivo


Posts recomendados

Olá, Boa tarde!

Estou com um problema chato em meu programa:
arq = fopen("logDigitado.txt","w+");
fprintf(arq,"%d",escrita);
Conteudo do arquivo: "038913"
fscanf(arq,"%d",&leituraDigitada);
txtSaida->Text = txtSenha->Text+":"+txtSenha2->Text+ " - " +Convert::ToString(leituraDigitada);

SAIDA: "hora":"minuto - 38913

A minha duvida é por que ele ignora o "0" inicial do arquivo texto?
OBS: SE HOUVER "0" NO MEIO DO TEXTO ELE NÃO IGNORA, ELE IGNORA APENAS OS INICIAIS.
Att.

Link para o comentário
Compartilhar em outros sites

Olá Irmão, bom dia!
Obrigado pela resposta, então eu também pensei na hipótese de ser o numero octal só que ele escreve no arquivo a saída completa com o inicial "0", então lógicamente o fscanf() também conseguiria ler este dado né...estou usando a IDE VISUAL STUDIO 2010 C/C++ e o compilador não exatamente qual é usado no VISUAL STUDIO mais acho que é um tal de "cl".

OBS: (Eu não posso deixar de ler este "0" é uma senha entende?)

Att.

Link para o comentário
Compartilhar em outros sites

isso é só um problema de formato de saida(alguma coisa como "%0ndezeros"  pra exibir os zeros à esquerda resolveria,tirando os problemas de interpretação de formatos se um numero tivesse um 0 como prefixo e um outro numero no arquivo,nao)

se for uma senha e voce precisar fazer alguma comparação pra ver se a senha esta correta,pode fazer a comparação que vai haver correspondencia se forem iguais

 

mas eu nao posso afirmar nada porque eu tambem uso o VS C++ 2010 professional e se eu fizesse

int escrita = 038913;

ele ja reclamaria,há menos que voce esteja compilando pra código em C puro e isso seja uma caracteristica de C que eu nao conheço,então sim ele pode aceitar isso,mas se tiver compilando default é uma tremenda bruxaria

Link para o comentário
Compartilhar em outros sites

Obrigado irmão! Recebi uma resposta também em outro fórum que parece ser a explicação correta, rsrs... Mas enfim eu tentei ler como String:
"
Ele lê. O que acontece é que você está querendo que um zero à esquerda de um inteiro seja representado na string. Isso não acontece. Leia como string ao invés de ler como inteiro, se possível.

A resposta dada em no link do Clube do Hardware ("porque o número é octal") está errada por dois motivos:
1- Na base oito, os dígitos válidos vão de 0 a 7. Ou seja, seu '9' transforma esse número num dado inválido para a base octal.
2- %d lê inteiros na base 10. %o é que lê octal."

 

String^ leituraAutomatica={""};
arq = fopen("logDigitado.txt","a+");
fscanf(arq,"%s",leituraAutomatica)
;
Ele não retorna nada apenas mantem o valor da sua declaração = "";
O que você acha que pode ser? Por que não retorna nenhum valor, por que não armazena nada na String^??

Eu estou achando por quê é String do VS C++ do pacote .NET e pode existir este conflito de c para c++.
a string do C é std::string e a string do C++ é String^.

Att.

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!