Ir ao conteúdo
  • Cadastre-se

Cifra de Cesar em C com espaço.


Iuri Bertto

Posts recomendados

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;
     
    
               
 
          }
Link para o comentário
Compartilhar em outros sites

http://forum.clubedohardware.com.br/forums/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);
Link para o comentário
Compartilhar em outros sites

 

http://forum.clubedohardware.com.br/forums/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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...