Как я могу исправить мое заявление if, не будучи признанным как истинное - PullRequest
0 голосов
/ 11 октября 2019

Я написал свою программу, которая должна проверять, состоит ли кто-то в браке (не состоят ли они в браке или нет), и являются ли они главой семьи, чтобы рассчитать налоги, которые они должны платить. По какой-то причине, когда я набираю y для первого сканирования, следующий оператор if пропускается. Пожалуйста помоги! Вот весь мой кодЯ знаю, что это не самый оптимизированный вариант, и я мог бы его почистить, но сначала я пытаюсь выяснить, что с ним не так.

    void question3 (void)
    {
    char single, head, joint;
    int income = 0;
    double tax = 0;

    printf("What is your total income?");
    scanf("%d", &income);

    printf ("Are you single? (y/n) \n");
    scanf (" %c", &single);

    if (single == 'y')
    {
        if (income == 17850)
        {
            tax = income * .15;
        }
        else if (income >= 17850)
        {
            tax = ((.15 * 17850) + (.28 * (income - 17850)));
        }
    }
    else
    {
        if (single != 'y')
        {
        printf("Are you the head of the house hold? y or n\n");
        scanf(" %c", &head);
        }
    }

    if (head == 'y')
    {
        if (income == 23900)
        {
         tax = income * .15;
        }
        else if (income >= 23900)
        {
         tax = ((.15 * 23900) + (.28 * (income - 23900)));
        }
    }
    else if (head != 'y')
    {
        printf("Do you have a joint marriage\n");
        scanf(" %c", &joint);
    }

    if (joint == 'y')
    {
        if (income == 29750)
        {
         tax = income * .15;
        }
        else if (income >= 29750)
        {
        tax = ((.15 * 29750) + (.28 * (income - 29750)));
        }
    }
    else if (joint != 'y')
    {
        if(income == 14875)
        {
         tax = income * .15;
        }
        else if (income >= 14875)
        {
         tax = ((.15 * 14875) + (.28 * (income - 14875)));
        }

    }

    printf("You owe %f dollars in taxes.", tax);
    }

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Вы можете использовать функции, чтобы разбить его так, чтобы для каждого истинного выражения он вызывал функцию. В каждой из функций вы запрашиваете доход, а затем даете результат. После того, как результат напечатан, он вызывает question3, чтобы повторить цикл.

Для каждого ложного выражения вы предоставляете другой выбор, который также либо вызывает функцию, либо дает другой выбор.

char single, head, joint;
int income = 0;
double tax = 0;

void Single();
void Head();
void Joint();

void question3(void)
{
    printf("Are you single? (y/n) \n");
    scanf(" %c", &single);

    if (single == 'y')
    {
        Single();
    }
    else if (single == 'n')
    {
        printf("Are you the head of the house hold? y or n\n");
        scanf(" %c", &head);

        if (head == 'y')
        {
            Head();
        }
        else if (head == 'n')
        {
            printf("Do you have a joint marriage\n");
            scanf(" %c", &joint);

            if (joint == 'y')
            {
                Joint();
            }
            else if(joint == 'n')
            {
               question3();
            }
        }
    }
}

void Single()
{
    printf("What is your total income?");
    scanf("%d", &income);

    if (income == 17850)
    {
        tax = income * .15;
    }
    else if (income >= 17850)
    {
        tax = ((.15 * 17850) + (.28 * (income - 17850)));
    }

    printf("You owe %f dollars in taxes.\n\n", tax);

    question3();

    return 0;
}

void Head()
{
    printf("What is your total income?");
    scanf("%d", &income);

    if (income == 23900)
    {
        tax = income * .15;
    }
    else if (income >= 23900)
    {
        tax = ((.15 * 23900) + (.28 * (income - 23900)));
    }

    printf("You owe %f dollars in taxes.\n\n", tax);

    question3();

    return 0;
}

void Joint()
{
    printf("What is your total income?");
    scanf("%d", &income);

    if (income == 29750)
    {
        tax = income * .15;
    }
    else if (income >= 29750)
    {
        tax = ((.15 * 29750) + (.28 * (income - 29750)));
    }

    printf("You owe %f dollars in taxes.\n", tax);

    question3();

    return 0;
}

void main()
{
   question3();

return 0;
}

0 голосов
/ 11 октября 2019

Для одного символа вы должны использовать getchar() вместо scanf:

single = getchar();

Если вы придерживаетесь scanf:

  • Вы должны удалить пробел (следовательно, scanf("%c", &single)).
  • Вы, вероятно, должны проверить возвращение scanf: он возвращает число аргументов, которые он может проанализировать (в вашем случае это должно быть 1, еслиок, 0 в противном случае).

С другой стороны, это бесполезно:

if (single == 'y') {
  ...
} else if (single != 'y') {
  ...
}

Если вас не волнует, что одиночное существо абсолютно равно y или n, тогда выследует просто написать те, если так:

if (single == 'y') {
  ...
} else {
  ...
}
...