• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Guest tsenart

[C] Ajuda: Cifra

5 mensagens neste tópico

Olá pessoal...

Deu-me na cabeça começar a fazer um programa que cifrava frases... Mas estou com alguns problemas...

#include <stdio.h>

void cifra(char *string);

void cifra(char *string)
{
int i;

     if (string[0] == '\0')
        puts("Não escreveu uma frase...");
     else
     {
          for(i=0;string[i]!='\0';i++)
          {
            switch(string[i])
            {
             case 'a' || 'A': string[i]="01"; break;
             case 'b' || 'B': string[i]="02"; break;
             case 'c' || 'C': string[i]="O4"; break;
             case 'd' || 'D': string[i]="O8"; break;
             case 'e' || 'E': string[i]="16"; break;
             case 'f' || 'F': string[i]="32"; break;
             case 'g' || 'G': string[i]="64"; break;
             case 'h' || 'H': string[i]="128"; break;
             case 'i' || 'I': string[i]="256"; break;
             case 'j' || 'J': string[i]="512"; break;
             case 'k' || 'K': string[i]="1024"; break;
             case 'l' || 'L': string[i]="2048"; break;
             case 'm' || 'M': string[i]="4096"; break;
             case 'n' || 'N': string[i]="8192", break;
             case 'o' || 'O': string[i]="2912"; break;
             case 'p' || 'P': string[i]="6906"; break;
             case 'q' || 'Q': string[i]="8402", break;
             case 'r' || 'R': string[i]="4201", break;
             case 's' || 'S': string[i]="215", break;
             case 't' || 'T': string[i]="652", break;
             case 'u' || 'U': string[i]="821", break;
             case 'v' || 'V': string[i]="46"; break;
             case 'w' || 'W': string[i]="23"; break;
             case 'x' || 'X': string[i]="61"; break;
             case 'y' || 'Y': string[i]="80"; break;
             case 'z' || 'Z': string[i]="40"; break;
             case ' '       : string[i]='_'; break;
             case 'ç' || 'Ç': string[i]="20"; break;
             case '.'       : string[i]="10"; break;
         
             default: string[i]='?';
            }
             
         
          }

}

main()
{ 
char frase[100];
       
       printf("Introduza uma frase a ser cifrada:  ");
       gets(frase);
       cifra(frase);
       puts(frase);
system("pause");
}
       

Dá-me sempre erro no switch a dizer:[Warning] assignment makes integer from pointer without a cast

                                                           

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No switch não podes por strings. Podes pôr inteiros ou caracteres mas strings não.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hipnoted.... Entao se eu tirar as aspas dos numeros no switch já deveria dar certo? Mas nao da...help!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, nao deveria.

Simplesmente tens um vector de caracteres (ou seja, uma string) só podes comparar caracter a caracter.

string[ i ] = "01" não faz qualquer sentido, porque a posição i ou contem um 0, ou um 1. Não pode conter os dois.

Quanto a retirar as aspas, vais comparar um caracter com um número. Isso é possível em C, ele compara os códigos ASCII, mas mais uma vez, na prática, estás a comparar dois caracteres: o da posição i da string e o caracter cujo código ASCII é 1 (01)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

por acaso o 'case' permite ter expressões lógicas?

onde está

case 'a' || 'A': string[i]="01"; break;

devia estar

case 'a' :
case 'A' : string[i]=...; break;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora