Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Alcap

Erro que nao devia existir!!

Mensagens Recomendadas

Alcap    0
Alcap

Boas,

Estava a fazer um dos exercicios resolvidos do Linguagem C (sem olhar pra soluçao ;)). O problema pode ser encontrado na pagina 148.

Escreva um programa em C que escreva no ecrã, toda a tavela ASCII (0..255 chars) escrevendo em cada linha o codigo ASCII e o caracter correspondente.

EXEMPLO

...

65 -->A

66 -->B

67 -->C

...

A resoluçao dada pelo livro é a seginte:

#include <stdio.h>
main()
{
int i;
for (i=0;i<=255;i++)
printf("%3d --> %c\n",i, (char) i);
}

A resoluçao criada por mim é:

#include <stdio.h>
main()
{
int x;
char y;
for(x=0;x<=255;x++, y++)
printf("%d ---> %c\n",x,y);
}

O erro aqui é que nenhum dos dois programas me da a tabela de ASCII. Muitos numeros nao tem correspondente e, por exemlo, o caracter C esta no numero 140 quando deveria estar no numero 67. Isto acontece tambem com a resoluçao que estava no livro, dai eu estar tao intrigado. Estou a compilar isto com o GCC, e a usar o KATE como editor(nao sei se isto é relevante :P)

Desde ja agradecido pela ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Alcap    0
Alcap

Falta sim. Mas agora é que a porca torce o rabo. Compilei isto em Windows e ja funciona :eek:. Mesmo sem inicializar a variavel y da-me o ASCII todo e nos numeros correctos. Ja o exemplo do Damas da erro a compilar.

PS: Tambem és de Braga ;)

EDIT: Deu erro a compilar porque eu me enganei ao escrever o codigo aqui no forum e depois fiz copy/paste para o IDE. No entanto o codigo compilado em Linux, tanto a minha resoluçao como a do Damas da aquele erro estupido

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Alcap    0
Alcap

Ve o meu edit ;). Escrevemos ao mesmo tempo

O erro que me da em linux é que o ASCII esta todo trocado. Exemplo: 140 --> C

Em Windows isto ja nao acontece, embora esteja a usar o mesmo codigo.

Fica bem

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

Ve o meu edit :D. Escrevemos ao mesmo tempo

O erro que me da em linux é que o ASCII esta todo trocado. Exemplo: 140 --> C

Em Windows isto ja nao acontece, embora esteja a usar o mesmo codigo.

Fica bem

eu já usei várias vezes um código semelhante em Linux e funcionava...

a única diferença é que eu normalmente não faço o casting para 'char' (no printf).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Alcap    0
Alcap

Quando for a linux volto a postar. Devo ter feito qq coisa mal... Ja agora: Qual é a diferença entre fazer o casting e nao fazer o casting?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

Ja agora: Qual é a diferença entre fazer o casting e nao fazer o casting?

em principio não deve ser nenhuma (acho eu...).

uma vez que usamos um '%c', ele vai imprimir o valor como sendo um caracter.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Alcap    0
Alcap

Curtia saber o que esta mal com isto lol. Se compilar este programa em linux da-me isto:snapshot93vu.png

Se compilar em windows da-me a tabela ASCII correcta. Não percebo isto...

Alguem me pode ajudar?

Desde ja agradecido

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nazgulled    8
Nazgulled

o typecasting que ali tens, não está ali a fazer nada, é desnecessário. exprimenta sem ele, talvez o erro esteja ai, se n tiver, n tou a ver...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

Se em vez de int x; utilizares unsigned char x; acontece o mesmo? Vais ter é que mudar a condição do for para x<=254 senão nunca mais sais do ciclo... mas só para teste, experimenta!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Alcap    0
Alcap

É pouco eficiente, mas eu so soube isso depois... Ja tentei com apenas 1 variavel com casting e sem casting e as duas me dao este erro estupido. Em windows nao acontece isto

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade