为什么我的如果不工作呢?

时间:2014-02-24 10:49:17

标签: c++ c if-statement for-loop

我用2D数组得到了一个不错的小函数。我想在第一个数组中搜索收入,然后使用相同的int在2D数组中找到正确的数字。

我将问题限制在一行代码中。 if循环中的if Else语句不起作用。我不知道为什么。任何没有用锤子击打它的想法。

   float get_total_income( float income)
{
    char status[10];
    float over_income = 30001;
    float final_rate = .35;
    float adjusted_income = 0;
    int check = -1;
    int x = 0;
    float rate;
    float array_income[] = { 6000.00, 9000.00, 15000.00, 21000.00, 25000.00, 30000.00 };

    float rates[][6] = { { .028, .075, .096, .135, .155, .174 }, { 0.0, .052, .083, .122, .146, .163 }, 
    { .023, .072, .089, .131, .152, .172 }, { 0.0, .038, .074, .110, .138, .154 } };


    printf("\n\t YOUR INCOME AFTER DEPENDANTS: %.2f", income);


    while (check < 0)
    {
        printf("\n\n\nEnter your Status (S, MJ, MS, SH)");
        gets_s(status);

        if (status[0] == 'S' && status[1] == '\0')
        {
            single_total = single_total + 1;
            check = 0;          
        }
        else if (status[0] == 'M' && status[1] == 'J')
        {
            mj_total = mj_total + 1;
            check = 1;
        }
        else if (status[0] == 'M' && status[1] == 'S')
        {
            ms_total = ms_total + 1;
            check = 2;          
        }
        else if (status[0] == 'S' && status[1] == 'H')
        {
            sh_total = sh_total + 1;
            check = 3;
        }
        else
        {
            printf("\n\n INCORRECT STATUS. Enter (S, MJ, MS, or SH) \n\n");
        }
    }


    if (income > over_income)
    {
        rate = final_rate;
    }
    else
    {
        for (x = 0; x<6; x++)
        {
            printf("num %i# \n", x);

            if (income <= array_income[x])
            {
                rate = rates[check][x];
                printf("\t\nworks, %i# in loop answer: %.3f\n",x, rate);
            }
        }//end for loop
    }//end if

    printf("\n\t YOUR TAX RATE: %.3f", rate);

    return rate;
}

在这部分:

for (x = 0; x<6; x++)
            {
                printf("num %i# \n", x);

                if (income <= array_income[x])
                {
                    rate = rates[check][x];
                    printf("\t\nworks, %i# in loop answer: %.3f\n",x, rate);
                }

不是停止一次打印,而是打印整个表格。 由于某种原因,If语句在这里没有功能,编译器忽略它。

应该发生什么 IF收入= 2000且&lt; = income_array 它应该打印数组的那部分。 然而,它只是继续前进,条件总是如此。

3 个答案:

答案 0 :(得分:3)

循环条件应为while (check == 0),否则永远不会输入循环,因为您已将check初始化为0

答案 1 :(得分:3)

你永远不会打破你的循环,所以它总是会跑到最后。如果要在条件为真时立即停止迭代,请使用以下代码:

for (x = 0; x<6; x++)
{
    printf("num %i# \n", x);

    if (income <= array_income[x])
    {
        rate = rates[check][x];
        printf("\t\nworks, %i# in loop answer: %.3f\n",x, rate);
        break;
    }
}

答案 2 :(得分:1)

由于收入值是从另一个函数传递出来的,我无法猜测,应该是什么

我的建议是如果声明**income** and **array_income[x]**之前的值都是printf 并找出根本原因。

此外,您希望if (income <= array_income[x])只能运行一次,但通过查看数组收入值,您的收入值可能总是更少。