我用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 它应该打印数组的那部分。 然而,它只是继续前进,条件总是如此。
答案 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])
只能运行一次,但通过查看数组收入值,您的收入值可能总是更少。