我的代码不会输出正确的项目编号
问题描述:
这是我的代码的一部分:在下面的第一部分中,我已经声明了一堆浮点数和整数。我已经编写了一个包含三列数据的输入文件。每个订单项都代表一种形状。矩形,三角形或圆形。我已经成功确定哪些项目是哪个。在下面,我试图获取这些数据并计算每个形状的面积。对于圆,pi * r^2,矩形,长*宽,等边三角形,1/2L * H。所以,我将每个形状类型的最大面积放在一个带有条件的循环中。我可以成功地获得所有三种形状的正确的最大面积,但我无法获得输出正确项目编号的代码。你能帮我吗?我的代码不会输出正确的项目编号
// 3. Which block has the largest area?
// ........................................................
float RA[M];
float CA[M];
float TA[M];
float MRA = 0.0;
float MCA = 0.0;
float MTA = 0.0;
int ItmR = 0;
int ItmC = 0;
int ItmT = 0;
int ItmN = 0;
// ........................................................
for (int i=0; i<M; i++)
{
if (btype[i] == Rectangles)
{
RA[i] = D[i] * E[i];
if (MRA < RA[i])
{
MRA = RA[i];
ItmR = i+1;
}
}
//}
//cout << "The block with the largest area is " << ItmR
// << endl;
// ........................................................
//for (int i=0; i<M; i++)
//{
if (btype[i] == Circles)
{
CA[i] = (3.14 * (D[i] * D[i]));
if (MCA < CA[i])
{
MCA = CA[i];
ItmC = i+1;
}
}
//}
//cout << "MCA = " << MCA << ", Item No. " << ItmC
// << endl;
// ........................................................
//for (int i=0; i<M; i++)
//{
if (btype[i] == Triangles)
{
TA[i] = (0.5 * (D[i] * E[i]));
if (MTA < TA[i])
{
MTA = TA[i];
ItmT = i+1;
}
}
//}
//cout << "MTA = " << MTA << ", Item No. " << ItmT
// << endl;
// ........................................................
if (MRA < MCA)
{
MRA = MCA;
ItmN = ItmC;
}
else
if (MRA < MTA)
{
MRA = MTA;
ItmN = ItmT;
}
else
{
MRA = MRA;
ItmN = ItmR;
}
}
cout << MRA << " " << ItmN << endl;
我不知道如何让它输出正确的答案项目编号。该代码明确输出正确的区域,但ItmN(项目编号)是错误的。
答
您的代码甚至不能得到最大的面积,仿佛MRA
小于MCA
和MCA
是小于MTA
,输出将是MCA
区域,作为两个都不选else
部分将得到执行。
为了清楚,还应该定义一个单独的变量来表示的最大面积,而不是重用MRA
,并判断所述最大面积的最后段应当把整个for
循环外,不内部。
float maxA = MRA;
ItmN = ItmR;
if (maxA < MCA)
{
maxA = MCA;
ItmN = ItmC;
}
//else
if (maxA < MTA)
{
maxA = MTA;
ItmN = ItmT;
}
//else
//{
// maxA = MRA;
// ItmN = ItmR;
//}
cout << maxA << " " << ItmN << endl;
我编辑你的帖子以从代码块中删除反引号,它们在那里不需要。 –
你得到了什么样的物品编号,你期望什么? –
学习使用调试器(例如Linux上的'gdb'),并在启用所有警告的情况下编译代码(在Linux上使用'gcc -Wall -g')。 –