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
La declaración
scanf("%.2lf\n", income);
está mal, por tres razones:
La función scanf espera la dirección de la variable en la que debe escribir, no el valor anterior de la variable.
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.
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 )