Guest tsenart Posted December 12, 2006 at 09:25 PM Report #70341 Posted December 12, 2006 at 09:25 PM 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
Hipnoted Posted December 12, 2006 at 09:27 PM Report #70342 Posted December 12, 2006 at 09:27 PM No switch não podes por strings. Podes pôr inteiros ou caracteres mas strings não. "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
Guest tsenart Posted December 12, 2006 at 09:37 PM Report #70344 Posted December 12, 2006 at 09:37 PM Hipnoted.... Entao se eu tirar as aspas dos numeros no switch já deveria dar certo? Mas nao da...help!
Warrior Posted December 12, 2006 at 10:40 PM Report #70354 Posted December 12, 2006 at 10:40 PM 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)
Rui Carlos Posted December 13, 2006 at 12:39 AM Report #70372 Posted December 13, 2006 at 12:39 AM 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; Rui Carlos Gonçalves
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now