[c] programa - cifrar/decifrar

Ruanes

Power Member
oi
estou a ter uns problems com um programa.

A parte do programa em que estou a ter problemas é na parte em que o usuario escreve uma frase e depois o programa vai ler a frase caracter a caracter e comparar cada um deles com cada caracter de um vector e se for igual troca esse caracter por outro que está noutra tabela.

Isto funciona muito bem quando é a cifrar mas a decifrar já é outra historia.(não aparece nada).

aqui está o codigo:
Código:
#include
[LEFT]<stdio.h>
[LEFT]#include[/LEFT]

<my_biblio.h>
[LEFT]#include[/LEFT]

<stdlib.h>
[LEFT]#define[/LEFT]

SINAL '-'
[LEFT]int[/LEFT]

main (int argc ,char *argv[])
[LEFT]{
char code[256];//guarda o codigo
char ncode[256];//guarda a lista
int i,j;//contador
char ch;//Caractere que vai guardar a opção
char txt[500];//Guarda o texto a ser cifrado/decifrado
//Preenchimento da lista
for (i=0;i<256;i++)
ncode[i]=(char)i;
//Preenchimento do codigo
for (i=255,j=0;i>=0;i--,j++)
code[j]=(char)i;
ncode[0]=code[0]=0;
//Teste aos parametros
switch(argc)
{
//Caso apenas exista um parametro
case 1:
//Pergunta ao usuario se pretende cifrar ou decifrar texto
puts([/LEFT]

"Cifrar(c) ou Decifrar(d)");
[LEFT]//Guarda a opção do usuario
ch=getchar();
//Se a opção nao for c nem d entao...
if (chicmp(ch,'c')==0 && chicmp(ch,'d')==0)
{
printf("Opcao errada\n\n");
system("pause");
exit (1);
}
system("cls");
if (chicmp(ch,'c')!=0)
printf("Cifrar\n\n");
else
printf([/LEFT]

"Decifrar\n\n");
[LEFT]puts ("Escreve a frase que queres ");
if (chicmp(ch,'c')!=0)
printf("cifrar\n");
else
printf([/LEFT]

"decifrar\n");
[LEFT]gets(txt);[/LEFT]
 
[LEFT]puts("\n\n");
if (chicmp(ch,'c')!=0)
for (i=0;txt[i]!='\0';i++)
for (j=0;j<=255;j++)
if (txt[i]==ncode[j])
putchar(code[j]);
elseif (chicmp(ch,'d')!=0)
for (i=0;txt[i]!='\0';i++)
for (j=0;j<=255;j++)
if (txt[i]==code[j])
putchar(ncode[j]);
puts("\n\n\n\nCompleto\n\n");
break;
case 2:
if (argv[1][0]!=SINAL)
{
puts("Sinal invalido");
exit(1);
}
if (chicmp(argv[1][1],'c')==0 && chicmp(argv[1][1],'d')==0)
{
printf("Opcao errada\n\n");
system("pause");
exit (1);
}
system("cls");
if (chicmp(argv[1][1],'c')!=0)
printf("Cifrar\n\n");
else
printf([/LEFT]

"Decifrar\n\n");
[LEFT]puts ("Escreve a frase que queres ");
if (chicmp(argv[1][1],'c')!=0)
printf("cifrar\n");
else
printf([/LEFT]

"decifrar\n");
[LEFT]gets(txt);[/LEFT]
 
[LEFT]puts("\n\n");
if (chicmp(argv[1][1],'c')!=0)
for (i=0;txt[i]!='\0';i++)
for (j=0;j<=255;j++)
if (txt[i]==ncode[j])
putchar(code[j]);
else
for (i=0;txt[i]!='\0';i++)
for (j=0;j<=255;j++)
if (txt[i]==code[j])
putchar(ncode[j]);
puts("\n\n\n\nCompleto\n\n");
break;
default:
puts("ERRO");
exit(2);
}
system("pause"); [/LEFT]
}
[/LEFT]
 
Última edição pelo moderador:
pequenos erros de código sem olhar para o funcionamento.

-isto da sempre falso:

Código:
if (chicmp(ch,'c')==0 && chicmp(ch,'d')==0)
{
printf("Opcao errada\n\n");
system("pause");
exit (1);
}


deves por :
if ((chicmp(ch,'c')==0) ||( chicmp(ch,'d')==0))

passas de ´e´ para 'ou'.


noutra parte do codigo ...

nao percebo para que é isto?? (gostava que explicasses 'code[j]=(char)i')


Código:
 for (i=255,j=0;i>=0;i--,j++)
 code[j]=(char)i;

o for so trabalha nesta linha faltam as { } para afectar a linha seguinte(acho que tens essa intensao)

Código:
for (i=255,j=0;i>=0;i--,j++)
{
code[j]=(char)i;
ncode[0]=code[0]=0;
}

so ao olhar para isto recomendo que olhes uma segunda vez para tentares reparar pequenos erros como estes (nao olhei para o resto do codigo... ... ...)
 
Última edição pelo moderador:
noutra parte do codigo ...

nao percebo para que é isto?? (gostava que explicasses 'code[j]=(char)i')


Código:
 for (i=255,j=0;i>=0;i--,j++)
 code[j]=(char)i;
é para preencher o vector com os caracteres da tabela ascii, mas ao contrario (não sei se é assim mas á primeira foi o que me ocorreu).
o for so trabalha nesta linha faltam as { } para afectar a linha seguinte(acho que tens essa intensao)

Código:
for (i=255,j=0;i>=0;i--,j++)
{
code[j]=(char)i;
ncode[0]=code[0]=0;
}

so ao olhar para isto recomendo que olhes uma segunda vez para tentares reparar pequenos erros como estes (nao olhei para o resto do codigo... ... ...)
não, é mesmo minha intenção fazer isso.

Depois de preencher os dois vectores altero a primeira posição para 0. (Mudei isto quando comecei a ter erros no programa. Pensei que fosse porque 0 na tabela ascii corresponde a '\0')
 
O for funciona sem os {}'s, tipo

Código:
for(...)
 instrucao;
Mas é boa prática ter as chavetas pois visualmente tem-se logo a noção de "hey, aqui está a instrucao/bloco de instrucoes do for"

Código:
for(...) {
 instrucao;
}

//ou, mais compacto

for(...) { instrucao; }
Alem de evitar erros classicos (mas tantas vezes dificeis de topar...)
Código:
for(...)
 instr1;
 instr2;
 instr3;
quando se queria
Código:
for(...) {
 instr1;
 instr2;
 instr3;
}
por isso também recomendo que coloques aí umas chavetas, se for essa a intenção ;)



eu referia-me a intenção de ele quer por duas instruções no "for" i para isso tem de usar chavetas... porque se nao so afecta a primeira instrução... era isso que eu queria dizer;
 
Pessoalmente não uso as {} quando o scope do ciclo/condição engloba apenas uma instrução. Embora eu saiba que é uma melhor prática de programação, penso que torna o código um pouco mais "chato" de ler..

Ontopic: Conseguiste resolver o problema?
 
Back
Topo