Ir ao conteúdo
  • Cadastre-se

Abel Castro

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

4
  1. Que solução mais compacta! Eu nunca conseguiria pensar em uma expressão como essa pra resolver esse tipo de problema rsrs. Gostaria de saber o nome desse seu professor.. Agradeço por compartilhar esse código, @Chrissy Costanza
  2. 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

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