Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

103
Visualizações
¿Cómo hacer declaraciones condicionales más compactas en C?

Tengo un fragmento de código que usa el bloque if-else if-else . Me pregunto si existen posibles formas de acortar la larga declaración condicional else if (cardLength == 16) && (numberArray[0] == 5 && (numberArray[1] == 1 || numberArray[1] == 2 || numberArray[1] == 3 || numberArray[1] == 4 || numberArray[1] == 5)) , por ejemplo, sin cambiar la lógica. En python, puedo hacerlo de esta manera: if (cardLength == 16) and (numberArray[0:2] in range(51,56)) . ¿Hay algún azúcar de sintaxis específico que pueda usar para este propósito en C?

 if (cardLength == 15) && (numberArray[0] == 3 && (numberArray[1] == 4 || numberArray[1] == 7)) { printf("AMEX\n"); } else if (cardLength == 16) && (numberArray[0] == 5 && (numberArray[1] == 1 || numberArray[1] == 2 || numberArray[1] == 3 || numberArray[1] == 4 || numberArray[1] == 5)) { printf("MASTERCARD\n"); } else if (cardLength == 13) && (numberArray[0] == 4) { printf("VISA\n"); } else { printf("INVALID\n"); }
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Póngalo en una función (estática). No pienses en el rendimiento/optimización todavía.


 static char *card_leng_type2string( unsigned len, int *arr) { if (len == 15 && arr[0] == 3 && arr[1] == 4 ) return "AMEX"; if (len == 15 && arr[0] == 3 && arr[1] == 7 ) return "AMEX"; if (len == 16 && arr[0] == 5 && arr[1] == 1 ) return "MASTERCARD"; if (len == 16 && arr[0] == 5 && arr[1] == 2 ) return "MASTERCARD"; if (len == 16 && arr[0] == 5 && arr[1] == 3 ) return "MASTERCARD"; if (len == 16 && arr[0] == 5 && arr[1] == 4 ) return "MASTERCARD"; if (len == 16 && arr[0] == 5 && arr[1] == 5 ) return "MASTERCARD"; if (len == 13 && arr[0] == 4) return "VISA"; return "INVALID"; }

Ahora su código de llamada podría simplemente hacer:

 printf("%s\n", card_leng_type2string(cardLength, numberArray) );
over 4 years ago · Santiago Trujillo Relatório

0

Podría convertir los primeros dos dígitos de numberArray en un nuevo número como este

 num = numberArray[0]*10 + numberArray[1]

y luego usar eso en las declaraciones condicionales para hacerlas más legibles

 int num = numberArray[0]*10 + numberArray[1] if ((cardLength == 15) && ((num == 37) || (num == 34))) { printf("AMEX\n"); } else if ((cardLength == 16) && ((num >= 51) && (num <= 55))) { printf("MASTERCARD\n"); } else if ((cardLength == 13) && ((num >= 40) && (num <= 49))) { printf("VISA\n"); } else { printf("INVALID\n"); } return 0; }
over 4 years ago · Santiago Trujillo Relatório

0

Suponiendo que las entradas en numberArray están en el rango 0-9, podría usar la función strchr . Esto devuelve no NULL si una cadena determinada contiene un carácter específico.

Reemplazar:

 numberArray[1] == 4 || numberArray[1] == 7 || numberArray[1] == 9

con

 strchr("479", '0' + numberArray[1])

Si numberArray fuera una matriz de caracteres, entonces la comprobación podría simplificarse a strchr("479", numberArray[1])

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda