• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Alcap

Erro que nao devia existir!!

16 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não falta inicializar a variável y?

EDIT

no exemplo do livro tem lá um parentesis a mais (no printf).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

qual é o erro que está a dar?

compilei com o gcc e não deu problemas...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

porque usar 2 variáveis, mesmo que funcione não é eficiente

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É 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

0

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