Ir ao conteúdo
  • Cadastre-se
Iuri Bertto

Cifra de Cesar em C com espaço.

Recommended Posts

Bom Dia!

Estou com a seguinte proposta de trabalho: Devo realizar um algoritmo que lê uma frase e a criptografa salvando em um arquivo.txt. Por ser simples resolvi utilizar a cifra de cesar, porém deparei alguns problemas que preciso resolver. Como preciso criptografar uma frase, preciso que o algoritmo entenda que depois dos "espaços" existe mais texto a ser criptografado, e que ele criptografe o espaço tambem, e gostaria que de "A" ele passasse para "Z" na hora das somas.

 

Abaixo segue o algoritmo com uma criptografia que utilizei, porém ela não funciona quando inserida uma frase contendo espaços. Por favor me ajudem :)

PS: sei que ele não está inserindo a frase correta no arquivo, irei corrigir depois de acertar a criptografia.

 

#include <stdio.h>
#include <string.h>
 
int main(int argc,char* argv[]){
 
FILE *pont_arq; //CRIA VARIAVEL PONTEIRO PARA ARQUIVO
char frase[100]; //VARIAVEL DA FRASE INSERIDA
int i=0; //VARIAVEL DO CONTADOR PARA O FOR
int chave,op; //VARAIVEL CHAVE DE CRIPTOGRAFIA E OPÇÃO DE MENU
 
//INTERFACE INICIAL A SER APRESENTADA PARA O USUARIO
printf("\n _______________________________________________________________________\n");
   printf("|                                                                       |\n");
   printf("|            ENCRIPT SOFT ver.1.0.0.0.0.0.0     CIFRA DE CESAR          |\n");
   printf("|                       Universidade Paulista - UNIP                    |\n");
   printf("|                                                                       |\n");  
   printf("|                           FACA SUA ESCOLHA                            |\n");
   printf("|                                                                       |\n");
   printf("|    1.................................CRIPTOGRAFAR UMA MENSAGEM        |\n");
   printf("|    2..............................DESCRIPTOGRAFAR UMA MENSAGEM        |\n");
   printf("|    0..........................................SAIR DO PROGRAMA        |\n");  
   printf("|                                                                       |\n");
   printf("|_______________________________________________________________________|\n");
   scanf("%d",&op); //LÊ A OPÇÃO DESEJADA
 
switch(op){ //INICIO DAS EXECUÇÕES DO MENU
    case 1: 
      //CRIANDO O ARQUIVO .TXT COM NOME "ARQUIVO_PALAVRA"
      pont_arq = fopen("arquivo_palavra.txt", "w");
 
      //TESTANDO SE O ARQUIVO FOI REALMENTE CRIADO
      if(pont_arq == NULL)
      {
       printf("Erro na abertura do arquivo!");
       return 0;
      }
 
     
     //INICIO 
     printf("\n\nEscreva uma chave:");
     scanf("%d",&chave);
 
     printf("\nDigite a frase a ser encriptada:");
     scanf("%s",frase);
     printf("\n\nFrase encriptada com sucesso!\n\n");
     printf("Encriptacao:  ");
     
     for(i=0;i<strlen(frase);i++)
     {
       int enc=(int)frase+chave;
       printf("%c",(char)enc);
                 }
      //USANDO FPRINT PARA ARMAZENAR A STRING NO ARQUIVO
      fprintf(pont_arq, "%s", frase);
      
      
      //FECHANDO ARQUIVO
      fclose(pont_arq);
 
      //MENSAGEM AO FINAL DA OPÇÃO
      printf("O arquivo foi  criado com sucesso!");
      printf("\n\n");
      system("pause");
      break;
     
    
               
 
          }

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://forum.clubedohardware.com.br/topic/1136701-tags-code-como-e-para-que-usar/

Você pode usar o scanf("%[^\n]s", &nome);
também pode usar o fgets
 

char frase[1000];printf("Digite a frase: ");fgets(frase,1000,stdin);

Au usar o scanf para ler espaços, pode ter um erro no final da leitura, não sei bem porque mas ele estoura o buffer e acaba escrevendo na proxima entrada (proximo scanf ou fgets), por isso se usa um truque que é colocar um getchar() depois do scanf. Teste o código e veja se tem necessidade do getchar caso escolha usar o scanf.

char frase[1000];printf("Digite a frase: ");scanf("%[^\n]s", &frase);

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

http://forum.clubedohardware.com.br/topic/1136701-tags-code-como-e-para-que-usar/

Você pode usar o scanf("%[^\n]s", &nome);

também pode usar o fgets

 

char frase[1000];printf("Digite a frase: ");fgets(frase,1000,stdin);

Au usar o scanf para ler espaços, pode ter um erro no final da leitura, não sei bem porque mas ele estoura o buffer e acaba escrevendo na proxima entrada (proximo scanf ou fgets), por isso se usa um truque que é colocar um getchar() depois do scanf. Teste o código e veja se tem necessidade do getchar caso escolha usar o scanf.

char frase[1000];printf("Digite a frase: ");scanf("%[^\n]s", &frase);

 

Ciroboy muito obrigado pela ajuda.

 

Inseri o Scanf com getchar no final porém ele apresenta um problema.

Quando executo o codigo com ou sem o getchar o algoritmo acaba pulando a opção de digitar a frase, como se ela ja tivesse sido digitada, dando continuidade nos demais procedimentos.

Ciroboy muito obrigado pela ajuda.

 

Inseri o Scanf com getchar no final porém ele apresenta um problema.

Quando executo o codigo com ou sem o getchar o algoritmo acaba pulando a opção de digitar a frase, como se ela ja tivesse sido digitada, dando continuidade nos demais procedimentos.

Pode ver no campo aonde deveria ser inserida a frase não consta nada e mesmo assim ele continuo o codigo.

algoritmo.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×