Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Caractere de escape \ não funciona no tipo Caracter #1049

Open
erickweil opened this issue Jun 8, 2022 · 3 comments
Open

Caractere de escape \ não funciona no tipo Caracter #1049

erickweil opened this issue Jun 8, 2022 · 3 comments
Labels
bug Indica que ocorreu um erro inesperado no programa/código

Comments

@erickweil
Copy link

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.

@AdsonEsteves AdsonEsteves added the bug Indica que ocorreu um erro inesperado no programa/código label Jun 11, 2022
@Prof-Rodrigo-Silva
Copy link

Prof-Rodrigo-Silva commented Jul 17, 2022

@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

@erickweil
Copy link
Author

erickweil commented Jul 17, 2022

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.

@Prof-Rodrigo-Silva
Copy link

Prof-Rodrigo-Silva commented Jul 17, 2022

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Indica que ocorreu um erro inesperado no programa/código
Projects
None yet
Development

No branches or pull requests

3 participants