所以我基本上整天都在编写这个程序,经历了许多迭代和问题,最后在完成后我回去运行它,发现我开始工作的最简单的部分现在不再起作用了。
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
void Determine_Output (double);
int main()
{
vector<double> thisVector(10);
double input=-2;
int i=1;
double average = 0.00;
double highest;
double lowest;
cout<<setprecision(3);
for (unsigned z=0; z<10; z++)
{
cout<<"Please enter result \"" <<i<< "\": ";
cin>> input;
if ((input <= 100)&&(input >= 0))
{
thisVector.push_back(input);
Determine_Output(thisVector[i]); //Offending procedure call
i++;
}
else if (input == -1)
break;
else
{
cout<<"Invalid input, must be between 0 and 100\n";
z--;
}
}
void Determine_Output (double output) { //Offending procedure
if (output > 90)
cout<<"A will be assigned to this result\n";
else if (output > 70)
cout<<"B will be assigned to this result\n";
else if (output > 60)
cout<<"C will be assigned to this result\n";
else if (output > 50)
cout<<"P will be assigned to this result\n";
else
cout<<"U will be assigned to this result\n";
}
当我第一次编写程序时,这应该工作(即99返回A,77返回B,66返回C等等)
现在我已完成其余代码(由于空间原因而省略),无论实际输入是什么,此部分总是返回U(输入为50或更低)。 我现在已经在这一部分工作了两个半小时,而且让我感到难过。
答案 0 :(得分:7)
您确定要初始化i = 1
吗?而不是使用索引,为什么不只是使用thisVector.back()
?或者更好的是,只需将input
传递给Determine_Output()
即可。您可以完全消除变量i
,至少在您向我们展示的代码中。
此外,您无需声明thisVector
的尺寸,因为push_back()
会根据需要增加矢量。
答案 1 :(得分:2)
vector<double> thisVector(10);
创建一个10个双打的向量,全部初始化为0.所以thisVector[0]
,thisVector[1]
,...,thisVector[9]
都是0.0。
您的考试是:
thisVector.push_back(input);
Determine_Output(thisVector[i]);
其中i
以1
开头,并且每次都会递增。第一次循环,thisVector.push_back(input);
将input
添加到向量的末尾,使其成为第11个元素thisVector[10]
。但DetermineOutput
是使用元素thisVector[1]
调用的,它仍然具有值0。
下一次循环播放时,您添加thisVector[11]
,i
现在为2
,因此您检查thisVector[2]
,当然也是0.0。等等。仅在最后一次迭代中,您检查thisVector[10]
,它是非零的(因为它是您阅读的第一个元素)。
所以,简化:
不要将向量初始化为10个元素。当你开始时,你希望它是空的。
摆脱i
。这完全没必要。使用thisVector.back()
引用您push_back
编辑的元素。 (或直接使用input
。)
摆脱z
。这也是不必要的。您需要运行循环,直到thisVector
有10个元素。
答案 2 :(得分:0)
您可以通过颠倒比较顺序来消除else if
结构:
void Determine_Output(double output)
{
char letter = 'U';
if (output > 50)
letter = 'P';
if (output > 60)
letter = 'C';
if (output > 70)
letter = 'B';
if (output > 90)
letter = 'A';
cout << letter << " will be assigned to this result.\n";
}
上述结构可能不那么令人困惑,尽管它多次覆盖了这封信。