Ir ao conteúdo
  • Cadastre-se

Abel Castro

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

posts postados por Abel Castro

  1. Eu estou implementando um programa para encriptar/decriptar uma mensagem através do método de César ou cifra de César.. 
    A princípio o código funciona, porém estou tendo problemas quando o usuário digita uma mensagem com espaços.

     

    Aqui está o código:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define tamanho 500
    void limpar_tela();
    int pega_mensagemEchave(int op, int chave, char* mensagem);
    void aplicaMetodo_mensagem(int op, int chave, char* mensagem);
    
    void limpar_tela(){
    	system("clear || cls");
    }
    int pega_mensagemEchave(int op, int chave, char* mensagem){
    	switch(op){
    		case 1:
    			printf("\n\nDIGITE A MENSAGEM QUE DESEJA CIFRAR: ");
    			break;
    		case 2:
    			printf("\n\nDIGITE A MENSAGEM QUE DESEJA DECIFRAR: ");
    			break;
    	}
    	fflush(stdin);
    	scanf("%[^\n]", mensagem);//PEGA TUDO O QUE VEM ANTES DO ENTER(\n) E ARMAZENA NA VARIÁVEL mensagem;
    	fflush(stdin);
    	printf("\n\nDIGITE A QUANTIA DE LETRAS DESLOCADAS: ");
    	scanf("%d", &chave);
    	return chave;
    }
    void aplicaMetodo_mensagem(int op, int chave, char* mensagem){
    	int i, tamanho_texto= strlen(mensagem); //O TAMANHO DO TEXTO É DEFINIDO COM A FUNÇÃO strlen DA BIBLIOTECA string.h;
    
    	printf("%d", chave);
    	//LOOP DO COMEÇO DO VETOR ATÉ O FINAL DELE;
    	for(i= 0; i< tamanho_texto; i++){
    		switch(op){
    			case 1:
    				mensagem[i]+= chave;
    				//CASO A LETRA+CHAVE SEJA UM ESPAÇO, O VETOR RECEBE O PRÓPRIO ESPAÇO;
    				if(mensagem[i]== 32){
    					mensagem[i]= 32;
    				//CASO A LETRA+CHAVE PASSE DE 'Z' E SEJA MENOR QUE 'z' OU APENAS SEJA MAIOR QUE 'z', A CONTAGEM REINICIA NO COMEÇO DO ALFABETO;
    				}else if((mensagem[i]> 90 && mensagem[i]< 97) || mensagem[i]> 122){
    					mensagem[i]-= 26;
    				}
    				break;
    			case 2:
    				mensagem[i]-= chave;
    				//CASO A LETRA+CHAVE SEJA UM ESPAÇO, O VETOR RECEBE O PRÓPRIO ESPAÇO;
    				if(mensagem[i]== 32){
    					mensagem[i]= 32;
    				//CASO A LETRA-CHAVE NAO CHEGUE EM 'a' OU NAO CHEGUE EM 'A', A CONTAGEM VAI PRO FINAL DO ALFABETO;
    				}else if(mensagem[i]< 65 || (mensagem[i]< 97 && mensagem[i]> 90)){
    					mensagem[i]+= 26;
    				}
    				break;	
    		}	
    	}
    }
    int main(){
    	int chave, op, continuar;
    	char mensagem[tamanho];
    
    	//LOOP PRINCIPAL PARA RODAR NOVAMENTE SE DIGITAR 'S';
    	do{
    		limpar_tela();
    		printf("\n\n\n\t\t\t\t\t\t\t%c DECIFRADOR/CIFRADOR DE C%cDIGOS DE ACORDO COM O SISTEMA CESAR %c\n\n\nO QUE DESEJA FAZER?\n\n1- CIFRAR UMA MENSAGEM.\n2- DECIFRAR UMA MENSAGEM.\n0- SAIR.\n", 179, 224, 179);
    		scanf("%d", &op);
    		if(op> 0){
    			limpar_tela();
    			chave= pega_mensagemEchave(op, chave, mensagem);
    			aplicaMetodo_mensagem(op, chave, mensagem);
    			switch(op){
    				case 1:
    					printf("\nMENSAGEM CIFRADA:\n%s", mensagem);
    					break;
    				case 2:
    					printf("\nMENSAGEM DECIFRADA:\n%s", mensagem);
    					break;
    			}
    		}else{			
    			break;
    		}
    		printf("\n\n\n\nDESEJA DECIFRAR/CIFRAR NOVAMENTE?\n\nTECLE 'S' PARA UTILIZAR O PROGRAMA NOVAMENTE.\nTECLE 'ENTER' PARA SAIR.\n");
    		fflush(stdin);
    		scanf("%c", &continuar);
    		fflush(stdin);
    	}while(continuar== 's' || continuar== 'S');
    	limpar_tela();
    	return 0;
    }

    Eu tentei fazer uma comparação com o valor decimal do espaço segundo a tabela ASCII, mas não sei por qual motivo eu não to conseguindo que o printf seja um espaço assim como a entrada..

    Se alguém puder dar uma lida e me ajudar, agradeço.. Valeu :) 

    • Curtir 1

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!