Ir ao conteúdo

C Dificuldade para acentuação com arquivo .txt


Ir à solução Resolvido por arfneto,

Posts recomendados

Postado

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!

Postado

@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

  • Solução
Postado

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

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