Ir ao conteúdo

Posts recomendados

Postado

Estou tendo problemas em ler consecutivamente linhas em um arquivo, ele é composto por:

jose

536

jose

536

 

e a estrutura que coloquei para lê-lo foi:

 

fgets

fscanf´(lê como inteiro)

fgets

fscanf ´(lê como inteiro)

 

porém, quando imprimo os dados lidos o resultado é:

 

jose

567

 

0

 

 como conserta isso?

Postado

@bartolomeu kuma  Posta seu código pra gente ver
 Segue um modelo de como lê em arquivo txt
 

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

main()
{
	FILE *arq;
	arq = fopen("420.txt","r");
	char le[100];
	fgets(le,100,arq);
	printf("%s",le);
}

 

Postado
Citação

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

struct pessoa{
	char nome[100];
	int codigo;
	
};

int main(int argc, char **argv)
{
	FILE *p = fopen("jose.txt","r");
	struct pessoa ind[2];

	fscanf(p,"%[^\n]s", ind[0].nome);
	fscanf(p,"%d",&ind[0].codigo);
	fscanf(p,"%[^\n]s", ind[1].nome);
	fscanf(p,"%d",&ind[1].codigo);


		
	puts(ind[0].nome);
	printf("%d\n", ind[0].codigo);
	puts(ind[1].nome);
	printf("%d\n", ind[1].codigo);

	
	
	fclose(p);
	
	return 0;
}

 

 

No caso, estava tentando ler uma strings, depois um inteiro, e assim sucessivamente, mas retornava espaços vazios quando imprimia. Troquei o fgets para o fscanf, mas mesmo assim ele não lê a linha do arquivo apos o segundo fscanf, o retorno está assim:

 

jose

536

 

0

 

colocando o arquivo como:

563

jose

jose

563

 

imprime isso:

 

563

0

jose

0

 

Postado
fscanf(p,"%d",&ind[0].codigo);
fgets(ind[0].nome,100,p);
fgets(ind[1].nome,100,p);
fscanf(p,"%d",&ind[1].codigo);

queria entender porque quando coloco para ler um nome com espaço, seja com fscanf usando o [^\n] ou fgets, o programa não sai certo como se lesse apenas sem espaço, com o fscanf normal;

 

quando coloco o código acima no mesmo código que tu enviou sai:

 

563

 

jose

 

0

Postado

Na linguagem C, não use fscanf e nem scanf (mesmo que o anterior, mas orientado ao stdin), visto que essas funções incluem caracteres indesejados no processo. O indicado é aplicar sempre fgets e, se necessário, atoi de stdlib.h para converter string em valor integral.

 

 

 

Espero ter ajudado GbhmuXl.gif.

  • Curtir 1
Postado
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
struct pessoa{
	char nome[100];
	int codigo;
	
};

int main(int argc, char **argv)
{
	FILE *p;
	p = fopen("421.txt","r");
	struct pessoa ind[2];
	
	fscanf(p,"%d",&ind[0].codigo);
	fscanf(p,"%s", ind[0].nome);
	fscanf(p,"%s", ind[1].nome);
	fscanf(p,"%d",&ind[1].codigo);

	printf("%s\n",ind[0].nome);
	printf("%d\n",ind[0].codigo);
	printf("%s\n",ind[1].nome);
	printf("%d\n",ind[1].codigo);

	
	
	fclose(p);
	
	return 0;
}

 

1.png

Postado

problema é que eu tenho que ler o nome com os espaços, o fscanf não faz isso e quando coloco o [^\n] ou o fgets buga tudo... Vou testar a sugestão do rjj, qualquer coisa atualizo o post.

Postado

@bartolomeu kuma

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
struct pessoa{
	char nome[100];
	char codigo[100];
};

int main(int argc, char **argv)
{
	FILE *p;
	p = fopen("421.txt","r");
	struct pessoa ind[2];	
	fgets(ind[0].codigo,100,p);
	fgets(ind[1].nome,100,p);
	fgets(ind[0].nome,100,p);
	fgets(ind[1].codigo,100,p);
	/*fscanf(p,"%d%d",&ind[0].codigo);
	fscanf(p,"%s%s", ind[0].nome);
	fscanf(p,"%s", ind[1].nome);
	fscanf(p,"%d",&ind[1].codigo);*/

	printf("%s\n",ind[0].nome);
	printf("%s\n",ind[0].codigo);
	printf("%s\n",ind[1].nome);
	printf("%s\n",ind[1].codigo);

	
	
	fclose(p);
	
	return 0;
}

 

1.png

Postado

Entendi, mas o código tem que ser gerado de maneira aleatória, por isso estava usando int nele, tem como fazer isso com uma string ou terei que gerar o código como inteiro e depois armazenar na string? Tem alguma função que transforme inteiros em tipo char ?

Postado

@vangodp  Ta com espaço porque ta declarado pra pular mesmo
 

printf("%s\n",ind[0].nome);
	printf("%s\n",ind[0].codigo);
	printf("%s\n",ind[1].nome);
	printf("%s\n",ind[1].codigo);

 Tirando os \n fica normal:atirador:

t.png
 

Arquivo de texto ↓
 

256 55
teste teste
teste teste
256 553

 

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!