Logo Hardware.com.br
Kaiuy
Kaiuy Novo Membro Registrado
2 Mensagens 0 Curtidas

Criptografia erro com funções em C

#1 Por Kaiuy 19/09/2015 - 16:34
Olá a todos,

Estou tendo certa dificuldade em fazer algumas funções do meu código funcionarem corretamente e por isso peço ajuda.

A função "erro" não está aguardando digitação de caractere pra prosseguir pra condicional, e a função "principal", quando é chamada pela segunda vez também não aguarda a digitação de caractere pra seguir com a condicional.
Pensei que poderia ser o fato da variável já conter informação, mas não sei como reiniciar uma variável do tipo char e também depois de algumas tentativas comecei a acreditar que não é esse o problema, mas também não consigo identificar.

Apenas para ilustrar situação: Trata-se de um trabalho para a faculdade baseado em criptografia. Por isso implementei a cifra de Cesar por ser a mais fácil de computacionar. Para o programa utilizei funções que leem e escrevem em arquivo texto pra que eu pudesse capturar os caracteres um a um sem precisar converter string pra char e aplicar a cifragem.

Desde já agradeço o auxílio.

[code=C]
#include
#include
#include
FILE *arc;
char txt, option;
int key=0, txtcode, txtdecode;

int codifica ();
int decodifica ();
int principal ();
int erro ();
int sai ();

main()
{
printf("\tBem vindo ao simulador de criptografia\n");
principal ();
return 0;
}

int codifica ()
{
arc=fopen("cripto.txt","w");
printf("\nDigite um numero para senha: ");
scanf("%d",&key);
printf("\nDigite o texto a ser criptografrado.\n");
while((txt=getche())!='\r')
{
txtcode=(int)txt+key;
fputc(txtcode,arc);
}
fclose(arc);
key=0;
system("cls");
principal ();
}

int decodifica ()
{
printf("Digite a senha: ");
scanf("%d",&key);
arc=fopen("cripto.txt","r");
while(!feof(arc))
{
txt=fgetc(arc);
txtdecode=(int)txt-key;
printf("%C", txtdecode);
}
fclose(arc);
key=0;
principal();
}

int erro ()
{
printf("Opcao invalida.\nDeseja continuar? (S/N)");
scanf("%c",&option);
if (option=='S'||option=='s')
{
principal();
}
else
{
sair();
}
}

int sair ()
{
printf ("\nTenha um bom dia.");
}

int principal()
{
printf("\nSelecione a opcao desejada.\n'C' para codificar\n'D' para decodificar\n'S' para sair\n");
scanf("%c",&option);
if (option=='C'||option=='c')
{
codifica();
}
else if (option=='D'||option=='d')
{
decodifica();
}
else if (option=='S'||option=='s')
{
sair();
}
else
{
erro();
}

}
[/code]
Bit0N3
Bit0N3 Cyber Highlander Registrado
14.5K Mensagens 3.4K Curtidas
#4 Por Bit0N3
20/09/2015 - 14:36
Mas seu programa ta fazendo quase nada alem de dar um monte de voltas por funções e de forma errada.

ideal seria reiniciar do zero isso e evitar comandos tipo system CLS e coisas do tipo.

usa o programa do link que passei como referencia, ele esta funcionando direito e te serve de base.

[]'s
Recomendação: Lord of the rings online MMORPG SHow de bola, roda no fedora pelo lutris.
Fábio novato
Fábio novato Super Participante Registrado
242 Mensagens 66 Curtidas
#5 Por Fábio novato
21/09/2015 - 18:45
Sobre a função principal ao ser chamada pela segunda vez, acho que limpando o buffer vc resolve isso. Tente usar mais variáveis locais, tipo, use uma variável option dentro da função 'erro'... talvez resolva.
PS: tem um printf com %C maiúsculo também.
O importante não é quantas vezes você cai e sim quantas você se levanta - Morihei Ueshiba, fundador do Aikido.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal