Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lampaed

Probleminha com Switch C

Recommended Posts

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.