Lampaed 1 Denunciar post Postado Abril 9, 2013 Galera, estava fazendo um exercícios na web, e me deparei com um dúvida.. No Switch tem como eu fazer uma verificação em duas condições ao mesmo tempo? Vou postar o código .. Não ligue para os comentário e o péssimo english.[ #include <stdio.h> #include <string.h> void main() { char hello[40]; printf("Please Digit Hello in your favorite Language or digit a number the 1 as 6"); scanf("%s", &hello); //gets(hello); printf("%s", hello); switch(hello) { case ("HELLO" || "1"): printf("Case %s: ENGLISH\n",hello); break; case ("HOLA" || "2"): printf("Case %s: SPANISH\n",hello); break; case ("HALLO" || "3"): printf("Case %s: GERMAN\n",hello); break; case ("BONJOUR" || "4"): printf("Case %s: FRENCH\n",hello); break; case ("CIAO" || "5"): printf("Case %s: ITALIAN\n",hello); break; case ("ZDRAVSTVUJTE" || "6"): printf("Case %s: RUSSIAN \n", hello); break; default: printf("Don't found your expression, do you don't know speak hello? how go say with your girlfriend..."); } } Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Abril 9, 2013 Você não pode colocar uma string em um case, pois o case só aceita números inteiros. Você tem que fazer uma escada if-else-if usando strcmp(string, hello) == 0 na expressão do if. Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
Henry-Keys 0 Denunciar post Postado Abril 9, 2013 Caro... Apenas para complementar... strcpy() retorna 0 quando as 2 strings avaliadas são iguais (a função é case-sensitive) ...... char language[10]; if( strcmp(language,"HELLO") == 0) { printf("English\n"); } else if( strcmp(language,"HOLA") == 0) { printf("SPANISH\n"); } .......... else { printf("Put some shit here\n"); } Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
ScreenBlack 13 Denunciar post Postado Abril 9, 2013 Fala Henry-Keys. :) Acho que você quis dizer "strcmp()" ao invés de "strcpy()". Compartilhar este post Link para o post Compartilhar em outros sites
Lampaed 1 Denunciar post Postado Abril 10, 2013 Ah Ok, Não sabia disso.. Ok Obrigado, mais mesmo assim o código vai ficar muito extenso e custoso, mais já que não tem outro jeito. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Abril 10, 2013 Nem tanto. O que antes era: case ("HELLO" || "1"): printf("Case %s: ENGLISH\n",hello); break; case ("HOLA" || "2"): printf("Case %s: SPANISH\n",hello); break; ... default: printf("Some nasty shit here..."); Vira: if(!strcmp("HELLO", hello) || !strcmp("1", hello)) printf("Case %s: ENGLISH\n", hello); else if(!strcmp("HOLA", hello) || !strcmp("2", hello)) printf("Case %: SPANISH\n", hello); ... else printf("Some nasty shit here..."); O que torna esse código tão extenso e custoso? Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
Henry-Keys 0 Denunciar post Postado Abril 10, 2013 Amigos.. screenblack, obrigado pela correção, fiz as pressas :lol: Renato, muito bom uso do operador lógico OR. Abraços. Compartilhar este post Link para o post Compartilhar em outros sites
Mateus GP 13 Denunciar post Postado Abril 20, 2013 Para o código ficar menos "poluido" use macros. #define cmp(a, b) (!strcmp(a, hello)) || (*hello == b) ... if(cmp("HELLO", '1')) ... Compartilhar este post Link para o post Compartilhar em outros sites