我的语法在这里是否正确? C ++

时间:2013-11-11 01:27:09

标签: c++ vector syntax call procedure

所以我基本上整天都在编写这个程序,经历了许多迭代和问题,最后在完成后我回去运行它,发现我开始工作的最简单的部分现在不再起作用了。

#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或更低)。 我现在已经在这一部分工作了两个半小时,而且让我感到难过。

3 个答案:

答案 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]);

其中i1开头,并且每次都会递增。第一次循环,thisVector.push_back(input);input添加到向量的末尾,使其成为第11个元素thisVector[10]。但DetermineOutput是使用元素thisVector[1]调用的,它仍然具有值0。

下一次循环播放时,您添加thisVector[11]i现在为2,因此您检查thisVector[2],当然也是0.0。等等。仅在最后一次迭代中,您检查thisVector[10],它是非零的(因为它是您阅读的第一个元素)。

所以,简化:

  1. 不要将向量初始化为10个元素。当你开始时,你希望它是空的。

  2. 摆脱i。这完全没必要。使用thisVector.back()引用您push_back编辑的元素。 (或直接使用input。)

  3. 摆脱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";
}

上述结构可能不那么令人困惑,尽管它多次覆盖了这封信。