Ir para conteúdo
Fórum Script Brasil
  • 0

Erro na leitura de caractere especial


Celestino Alona

Pergunta

Boa tarde, gostaria de deixar aqui minha dúvida sobre um código que fiz. É um jogo da forca e ele até está funcionando bem, porém quando o usuário insere um caractere especial, ele simplesmente não faz a leitura. Por exemplo, se a palavra a ser adivinhada pelo(s) jogador(es) for " óculos ", na hora que o usuário inserir uma letra com o respectivo acento ( no caso é o acento agudo no 'o' ) irá aparecer na tela qualquer coisa, menos a letra 'O' com o acento. Deve ficar mais claro com o código (assim espero kkk)

 

#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#include<conio.h>


main()
{
	setlocale(LC_ALL,"portuguese");
	
	char tentativa, palavra[200], incognita[200];
	int cont=0, quant_cp, final=0, aux=0, ind_copy=0;
	
	printf("\n\t\t\t\t\tJOGO DA FORCA");
	
	printf("\n\nInsira a palavra a ser adivinhada : ");
	setbuf(stdin,NULL);
	gets(palavra);
	
	quant_cp = strlen(palavra); // Pega a quantidade de caracteres da palavra inserida
	system("cls");
	
	printf("\n\t\t\t\t\tJOGO DA FORCA");
	
	printf("\n\nLembre-se de que espaços são como letras.");
	
	printf("\n\n\n\n\t\t");
	for(cont=0; cont<quant_cp; cont++)
	{
		incognita[cont] = '_';  // Coloca "underlines" em um vetor para ser impresso 
		                      // de acordo com a quantidade de caracteres                                       
	}
	
	
	do
	{
		system("cls");
		printf("\n\t\t\t\t\tJOGO DA FORCA");
		
		printf("\n\nLembre-se de que espaços são como letras.");
		
		printf("\n\n\n\n\t");
		
		for(cont=0; cont<quant_cp; cont++)
	{
		printf("%c ", incognita[cont]); // Imprime os "underlines" na tela
			
	}
		printf("\n\nInsira uma letra : ");
		setbuf(stdin,NULL);
		tentativa = getch();
		
		for(cont=0; cont<quant_cp; cont++)  // Verificar se a letra foi inserida anteriormente, evitando o término 
		{                                   // do jogo de forma indesejada.
			if(tentativa == incognita[cont])
			{
				goto jump;
			}
		}
		
		
		for(cont=0; cont<quant_cp; cont++)
		{
			if(tentativa == palavra[cont])
			{
				incognita[cont] = tentativa; // Armazena a letra correta em icognita
				final++; // Faz o incremento. Quando "final" tiver um valor igual à quantidade de caracteres (quant_cp) da palavra inserida
			            // o programa é encerrado. 			      
		    } 	  
		}
		
		jump:
		
		for(cont=0; cont<quant_cp; cont++)
		{   
			printf("%c ", incognita[cont]);
		}
	}
	while(final!=quant_cp);
	
	printf("\n\nParabéns, você venceu !");
	
	return 0;
}

 

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá ... !

A muito tempo pesquisei sobre esse mesmo problema, e não encontrei solução ideal; quando chamado setlocale modifica os padrões de entrada que se tornam incompatíveis com de saída. Assim a solução encontrada foi chamar setlocale segundo a condição no momento, ou seja, se de entrada restabeleço o padrão "C", se de saída o padrão "portuguese".

 

#include <stdio.h>
#include <locale.h>
int main( void )
{
  char forca[]= "força";
  
  setlocale( LC_ALL,"portuguese" );                  // Liga
  printf( "%ls",L"Qual é o antônimo de fraqueza: " );
  setlocale( LC_ALL,"C" );                           // Desliga
  
  scanf( "%s",forca );
  printf( "A %s.\n",forca );
  return 0;
}

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
6 horas atrás, britivaldo disse:

e não encontrei solução ideal;

Se é que mais fácil não posso deixar... https://www.clubedohardware.com.br/forums/topic/1298286-problema-para-ler-uma-string-com-acento/?do=findComment&amp;comment=7106397

Quem n ler esse artigo passará a vida buscando uma solução que não existe. >_<

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...