Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

172
Vistas
Cálculo dentro de la declaración if bajo el interruptor

Estoy tratando de escribir un código que permita a un usuario ingresar un estado civil y los ingresos para calcular el impuesto adeudado. si la entrada del estado civil está fuera de 1-4, el programa se cerrará. Estoy tratando de usar el interruptor y si no, pero parece que estoy atascado con el código que genera la parte adeudada por impuestos. cada vez que ingrese los ingresos, no generará el monto adeudado de impuestos. ejemplo, para el caso 1: en el interruptor (última línea) para el estado civil, ingreso 1 (para soltero) e ingrese 20000 para ingresos. el resultado debería mostrar $3000 pero no dará ningún resultado. A continuación se muestra el código que tengo hasta ahora.

 #include<stdio.h> int main() { //declaration status = filing status , income = income input, taxOwed = tax owed calculation. int status; double income, taxOwed; //data/input printf("************Menu****************\n"); printf("1) Single\n"); printf("2) Married Filing Jointly\n"); printf("3) Married Filing Separately\n"); printf("4) Head of Household\n"); printf("5) Exit\n"); printf("\n"); printf("********************************\n"); printf("\n"); printf("Enter status : "); scanf("%d", &status); //processing switch with Calculation within each case switch(status) { case 5: printf("\n", status); printf("Exit Program...\n"); break; case 6: case 7: case 8: case 9: printf("You entered a wrong status. Program Exit . . ."); break; default: printf("You entered a wrong status. Program Exit . . ."); break; case 1: printf("Enter your taxable TI: $"); scanf("%.2lf\n", income); if (0 < income <= 24000) { taxOwed = (income * 0.15); printf("\n"); printf("The taxes owed are: $%.2lf", taxOwed); break; } else if (24000 < income <= 58000) { taxOwed = 3600 + (0.28 * (income - 24000)); printf("The taxes owed are: $%.2lf", taxOwed); break; } } return 0; }

cualquier revisión y ayuda es muy apreciada. gracias

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

La declaración

scanf("%.2lf\n", income);

está mal, por tres razones:

  1. La función scanf espera la dirección de la variable en la que debe escribir, no el valor anterior de la variable.

  2. No está claro qué pretende hacer el .2 . Probablemente esté confundiendo la cadena de formato scanf con la cadena de formato printf . Esto probablemente está causando que scanf falle. Siempre debe verificar el valor de retorno de scanf para ver si la función fue exitosa o no.

  3. El \n en la cadena de formato hará que scanf continúe leyendo espacios en blanco, hasta que encuentre un carácter que no sea un espacio en blanco. Esto significa que debe presionar la tecla ENTER al menos dos veces y debe proporcionar información adicional. Esto probablemente no es lo que quieres.

Por lo tanto, debe cambiar esa línea a la siguiente:

scanf("%lf", &income);

Asimismo, las declaraciones

if (0 < income <= 24000)

y

else if (24000 < income <= 58000)

estan equivocados.

Probablemente deberían ser

if (0 < income && income <= 24000)

y:

else if ( 24000 < income && income <= 58000 )

La razón por la que están equivocados es la siguiente:

De acuerdo con las reglas de precedencia de operadores , la expresión

24000 < income <= 58000

es equivalente a:

(24000 < income) <= 58000

Esto significa que esta expresión es equivalente a cualquiera

0 <= 58000

o

1 <= 58000

dependiendo de si (24000 < income) se evalúa como verdadero ( 1 ) o falso ( 0 ).

En ambos casos, la expresión completa se evaluará como verdadera, porque 58000 es mayor que 0 y 1 .

Por eso escribir

if (0 < income <= 24000)

y

else if (24000 < income <= 58000)

no tiene sentido, porque estas afirmaciones equivalen a escribir

if ( 1 )

y:

else if ( 1 )

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda