Ir ao conteúdo
  • Cadastre-se

C fscanf n esta funcionando


Ir à solução Resolvido por Ansi C,

Posts recomendados

Olá eu estou tentando pegar dados de um arquivos de texto e ele esta formatado porque usei o fprintf para colocar no arquivo mas quando tento recuperar os dados o retorno n é o esperado

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

int main(int argc, char const *argv[])
{
	int cad_id, cad_id_res;
	char cad_nome[20], cad_nome_res[20];
	int cad_telefone, cad_telefone_res;

	FILE *arquivo;

	arquivo = fopen("arquivos/teste.txt", "a+");

	if (arquivo == NULL)
	{
		arquivo = fopen("arquivos/teste.txt", "w");

		if (arquivo == NULL)
		{
			CreateDirectory("arquivos", NULL);
			arquivo = fopen("arquivos/teste.txt", "w");
		}
		else
		{
			fclose(arquivo);
			arquivo = fopen("arquivos/teste.txt", "a+");
		}
	}

	printf("Digite o id: ");
	scanf("%i", &cad_id);

	setbuf(stdin, NULL);

	printf("Digite o nome: ");
	scanf("%[^\n]", cad_nome);

	setbuf(stdin, NULL);

	printf("Digite o telefone: ");
	scanf("%i", &cad_telefone);

	clientes->id = cad_id;
	strcpy(clientes->nome, cad_nome);
	clientes->telefone = cad_telefone;

	fprintf(arquivo, "%05i %-20s %9i\n", clientes->id, clientes->nome, clientes->telefone);

	fscanf(arquivo, "%i %20s %i\n", &cad_id_res, cad_nome_res, &cad_telefone_res);

	printf("%i %s %i \n", cad_id_res, cad_nome_res, cad_telefone_res);

	fclose(arquivo);

	system("pause");
	return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Gabriel Paulucci Olá! Depois de gravar você pode move o ponteiro do fluxo para o começo do arquivo.

 

Pode fazer isso no mesmo ponteiro, pois na implementação ele foi aberto no modo "a+" leitura e gravação. Porém como o indicador setado no fim do arquivo (append) para acrescentar. Para ler o seu conteúdo do começo, basta reiniciar o fluxo.

/*- Ler os dados ... -*/
    rewind(arquivo); /* do começo */
    fscanf(arquivo, "%5i %20s %9i\n", &cad_id_res, cad_nome_res, &cad_telefone_res);

 

Consulte também fseek.

 

Você entendeu isso?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

É o que está sendo gravado no aquivo?

 

Nesta informação você não pressiona  "-" em momento algum, no algoritmo acima do post original essa não é string de formatação que estava usando! Pode por gentiliza atualizar o post.

 

Que a amanhã eu verifico essa string de formatação.

13 minutos atrás, Gabriel Paulucci disse:

eu estou tendo como retorno 

image.png.be4dd9de1302bde1bdb95411b9830d7e.png

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@Gabriel Paulucci Você precisa definir, absolutamente como pretende gravar esses dados, porque a escolha de gravação surtira efeito tanto no layout dentro do arquivo como também na strings de formatação nas funções de leitura. Então, observei que a maior dificuldade de leitura é o campo nome porque os espaços não são capturados quando usado "%s". O mesmo problema não existe no uso do formatador "%c" (para caracteres), por exemplo, "%20c" vai captura, se no scanf, os 20 primeiros caracteres, consequentemente, apenas a parte interessante da string no teste (nome). Para função printf usa-se "%-.20s", ou seja, limita-se a saída de 20 caracteres,  o mesmo número na formatação de fscanf.

 

Sim! Tem esse pontinho antes do sinal de subtração, pois não se trada do tamanho do campo, como é o caso de fprintf, mas sim, da quantidade de caracteres na saída daquele campo.

 

Resumo

  • para fscanf: "%5i %20c %9i"
  • para fprintf: "%05i %-20s %09i"
  • para printf:  "%05i %-.20s %09i

 

Imagem Ilustrativa (sujeita a remoção)

ansic201804101016.png.80dd887c2071f141f642fee3e24084f3.png

 

 

― Tem mais algo?

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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!