将多个输入语句转换为循环?

时间:2012-02-18 14:42:12

标签: c++

好的,我有5个变量的这个功能。 score1-score5。而不是在我的代码中重复5次用户输入提示是否有一种方法可以使用循环来存储用户输入并完成每次迭代?这是作业,但它不再重要,因为我有程序正常工作,我只是想清理一下代码。我也不能在这里使用数组。提前感谢任何建议。

void getScore(double &score1, double &score2, double &score3, double &score4, double &score5)
{   
    cout << "Enter a score: ";
    cin >> score1;
    cout << "Enter a score: ";  
    cin >> score2;
    cout << "Enter a score: ";  
    cin >> score3;
    cout << "Enter a score: ";  
    cin >> score4;
    cout << "Enter a score: ";
    cin >> score5;
    cout << "-------------------" << endl;

2 个答案:

答案 0 :(得分:3)

为什么不将std::vector<double>用作:

std::vector<double> readScore(int count)
{
    std::vector<double> v;
    for (int i = 0; i < count ; ++i)
    {
        double score;
        std::cout << "Enter a score: ";
        std::cin >> score;
        v.push_back(score);
    }
    return v;
}

std::vector<double> scores = readScore(5);

如果你不能改变功能参数,并且必须坚持5个参数,那么你可以这样做:

void getScore(double &score1, double &score2, double &score3, double &score4, double &score5)
{
     //store the address of each parameter in an array of pointers
     double *input[] = {&score1,&score2,&score3,&score4,&score5};
     for(int i = 0 ; i < 5 ; ++i)
     {
          std::cout << "Enter a score : ";
          std::cin >> *input[i]; //it reads into parameters!
     }
}

在此解决方案中,首先将每个参数的地址存储在指针数组中,然后在循环中使用指针数组来读取分数。由于input[i]是其中一个参数的地址,具体取决于i的值,因此std::cin >> *input[i]将读取用户输入并将其存储在input[i]所在的同一地址指向,这只是参数之一。

答案 1 :(得分:3)

如果没有保存值的数据结构的用户,您将无法使用循环。但是,您可以将实际读数分解为函数,以避免某种程度的代码重复:

bool getScore(double& score)
{
    std::cout << Enter a score: ";
    return std::cin >> score;
}

bool getScore(double &score1, double &score2, double &score3, double &score4, double &score5)
{
    return getScore(score1)
        && getScore(score2)
        && getScore(score3)
        && getScore(score4)
        && getScore(score5);
}

此示例还添加了一些错误检查:需要检查程序的所有输入。如果没有这个,你最终会在任何输入错误时处理随机数据。