Ir ao conteúdo
  • Cadastre-se

C Dificuldade para acentuação com arquivo .txt


Heyheyhey
Ir à solução Resolvido por arfneto,

Posts recomendados

Estou tendo que fazer um trabalho para o curso, onde estou tentando desenvolver um sistema de para uma locadora, utilizando um arquivo .txt. Neste arquivo consta: nome do filme, ano de lançamento e o nome do diretor do filme. Onde em alguns há acentuação, mas o printf acaba bugando na hora de printar.

No módulo main do programa eu já fiz o setlocale (LC_ALL,"Portuguese_Brazil").

Acredito que o problema esteja no momento em que passo a string do .txt para a variável, mas não tenho certeza.

 

void listafilmes(){
	FILE *arquivo;
	char string[3000], *titulo, *diretor;
	int ano;
	arquivo = fopen("filmes.txt", "r");
	if (arquivo==NULL){
    	printf("Erro ao abrir arquivo\n");
    	getch();
    	return;
    }
	fgets (string, 3000, arquivo);
	while(!feof(arquivo)){
		titulo = strtok(string,",");
		ano = atoi(strtok(NULL,","));
		diretor = strtok(NULL,",");
		
		printf("TÍTULO: %s  ANO: %d  DIRETOR: %s", titulo, ano, diretor);
		printf("\n");
		
		fgets (string, 3000, arquivo);
	}
	fclose(arquivo);
}

 

Obrigado!

Link para o comentário
Compartilhar em outros sites

@Davi Silva Santos Está em UTF-8 sim.

Mas creio que o problema não está no locale, pois aqui, o "TÍTULO", fica acentuado.

45 minutos atrás, Heyheyhey disse:

printf("TÍTULO: %s ANO: %d DIRETOR: %s", titulo, ano, diretor);

 

Acredito que realmente o problema está nesta parte, onde passasse o conteúdo da string do txt para as variáveis:

49 minutos atrás, Heyheyhey disse:

titulo = strtok(string,","); ano = atoi(strtok(NULL,",")); diretor = strtok(NULL,",");

 

Mas não tenho ideia de como posso fazer para resolver isso.

 

Exemplo da execução:

imagem.png.8f46258d81dc0bbfc5cde2b67eaaeb62.png

adicionado 6 minutos depois

Aqui está o arquivo txt caso auxilie

filmes.txt

Link para o comentário
Compartilhar em outros sites

  • Solução

Precisa realmente disso? Se não faz parte do enunciado passe um filtro no txt e deixe apenas as letras. Isso é um inferno e não tem fim. E não acrescenta nada ao software de locadora e ao algoritmo em si.

 

Mas se precisa mesmo disso defina a página de código em uso para uma que tenha essas letras, como a 850 ou 65001 usando SetConsoleOutputCP(850) por exemplo como descrita em https://en.wikipedia.org/wiki/Code_page_850

 

O certo é usar no início do programa GetConsoleOutputCP(void); e salvar o valor. Aí você chama SetConsoleOutputCP(850) e ao final do programa restaura chamando o que salvou, como 

int pagina = GetConsoleOutputCP(void);
SetConsoleOutputCP(850);

...

SetConsoleOutputCP(pagina); // ao final

Deve ser só isso. 

  • Curtir 1
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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!