Portugol-Studio icon indicating copy to clipboard operation
Portugol-Studio copied to clipboard

Caractere de escape \ não funciona no tipo Caracter

Open erickweil opened this issue 2 years ago • 3 comments

Descrição do Problema: Ao utilizar o caracter de escape \ para representar aspas simples ' , quebra de linha \n ou tabulações \t dentro do valor literal de um tipo caracter produz apenas o próprio caracter de escape \ e não o símbolo que deveria. Mensagem de Erro (se houver):

programa
{
	
	funcao inicio()
	{
		caracter aspas = '\''
		escreva(aspas,"\n")
		
		caracter quebra = '\n'
		escreva(quebra,"\n")
		
		caracter tab = '\t'
		escreva(tab,"\n")
	}
}
Resultado da Execução:
\
\
\

Programa finalizado. Tempo de execução: 37 milissegundos

A saída do programa mostra que os três valores são entendidos como \ e não o caracter que eles representam. Sendo a única forma de se obter estes caracteres especiais extraí-los de um texto cadeia usando a biblioteca Texto.

erickweil avatar Jun 08 '22 21:06 erickweil

@erickweil Isso ocorre pois caracter imprime um único caracter, logo é omitido o n ou t. Para isso deve-se usar o tipo cadeia que suporta mais caracteres, que é o caso: \n e \t. Além disso, variáveis do tipo cadeia e caracter com o símbolo \, devem utilizá-lo como \\. Isso se deve ao símbolo \ ser utilizado em casos como \t e \n onde ele passa por uma reinterpretação do seu significado, se tornando uma tabulação e um pular respectivamente. Abaixo, um exemplo de uso: Captura de tela de 2022-07-17 13-37-38

Prof-Rodrigo-Silva avatar Jul 17 '22 16:07 Prof-Rodrigo-Silva

Isso ocorre pois caracter imprime um único caracter, logo é omitido o n ou t. Para isso deve-se usar o tipo cadeia que suporta mais caracteres, que é o caso: \n e \t. Além disso, variáveis do tipo cadeia e caracter com o símbolo \, devem utilizá-lo como \\. Isso se deve ao símbolo \ ser utilizado em casos como \t e \n onde ele passa por uma reinterpretação do seu significado, se tornando uma tabulação e um pular respectivamente. Abaixo, um exemplo de uso: Captura de tela de 2022-07-17 13-37-38

Olha agradeço sua atenção, porém acho que não compreendeu o que eu estava reportando. Veja bem, a barra invertida '' é utilizado no portugol e também em muitas outras linguagens de programação como um caracter de escape para representar caracteres especiais.

No caso do Portugol Studio, os caracteres especiais são \ que representa a própria barra invertida, " para representar aspas duplas, \n para quebras de linha e \t para tabulação. Estes caracteres especiais funcionam perfeitamente bem quando colocados dentro de aspas duplas representando um tipo literal cadeia. Porém, não é possível representar esses caracteres através da definição literal caracter, que é feita com aspas simples. Basicamente, os caracteres \, ", \t, \n, são apenas 1 caractere, apesar de serem escritos utilizando dois símbolos na prática eles serão armazenados como sendo um único caractere, portanto sua explicação de que deve utilizar o tipo cadeia não faz sentido.

Além disso, Este não é o comportamento esperado do tipo caracter em nenhuma outra linguagem que trabalha com tipos que representam apenas um caracter. Em Java por exemplo, é perfeitamente aceitável criar um tipo char que recebe os valores '\n' ou '\t' e até mesmo ' \ ' ', pois é assim que o escape de caracteres especiais deveria funcionar.

Em resumo, existe um bug na interpretação de caracteres no Portugol Studio quando se utiliza o tipo literal caracter, isto é, quando se escreve valores dentro de aspas simples, fazendo com que caracteres especiais não sejam interpretados da forma que deveriam, tornando impossível representar certos caracteres através da definição literal com as aspas simples.

erickweil avatar Jul 17 '22 16:07 erickweil

Ok, agora sim entendi a sua posição, acreditava ser apenas uma questão de impressão na tela. Bom, vamos monitorar e testar algumas possíveis soluções! Por último, cabe destacar que: "variáveis do tipo cadeia e caracter com o símbolo , devem utilizá-lo como \. Isso se deve ao símbolo \ ser utilizado em casos como \t e \n onde ele passa por uma reinterpretação do seu significado, se tornando uma tabulação e um pular respectivamente." é uma referência de saída do próprio PS. []s

Prof-Rodrigo-Silva avatar Jul 17 '22 17:07 Prof-Rodrigo-Silva