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

C++ 将多个输入语句转换为循环?,c++,C++,这个函数有5个变量。得1-5分。有没有一种方法可以代替在我的代码中重复提示用户输入5次,使用循环存储用户输入并完成每次迭代?这是我的家庭作业,但这已经不重要了,因为我的程序运行良好,我只想清理一下代码。我也不能在这里使用数组。提前感谢您的建议 void getScore(double &score1, double &score2, double &score3, double &score4, double &score5) { cout

这个函数有5个变量。得1-5分。有没有一种方法可以代替在我的代码中重复提示用户输入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;
void getScore(双倍计分1、双倍计分2、双倍计分3、双倍计分4、双倍计分5)
{   
cout>1分;
cout>2分;
cout>3分;
cout>4分;
cout>5分;

你为什么不使用std::vector作为:

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);
std::向量读取分数(整数计数)
{
std::向量v;
对于(int i=0;iscore;
v、 推回(得分);
}
返回v;
}
标准::向量分数=读取分数(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!
     }
}
void getScore(双倍计分1、双倍计分2、双倍计分3、双倍计分4、双倍计分5)
{
//将每个参数的地址存储在指针数组中
双*输入[]={&score1、&score2、&score3、&score4、&score5};
对于(int i=0;i<5;++i)
{
std::cout>*输入[i];//它读入参数!
}
}

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

为什么不使用
std::vector
作为:

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);
std::向量读取分数(整数计数)
{
std::向量v;
对于(int i=0;iscore;
v、 推回(得分);
}
返回v;
}
标准::向量分数=读取分数(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!
     }
}
void getScore(双倍计分1、双倍计分2、双倍计分3、双倍计分4、双倍计分5)
{
//将每个参数的地址存储在指针数组中
双*输入[]={&score1、&score2、&score3、&score4、&score5};
对于(int i=0;i<5;++i)
{
std::cout>*输入[i];//它读入参数!
}
}

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

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

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);
}
bool-getScore(双倍&分数)
{

std::cout如果没有数据结构的用户持有这些值,您将无法使用循环。但是,您可以将实际读取的值考虑到函数中,以避免某种程度的代码重复:

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);
}
bool-getScore(双倍&分数)
{

std::你可以使用数组而不是五个参数吗?我猜也不允许使用std:向量。在这种情况下,你不能循环。按照教授的指示,没有数组。相信我,我现在已经这样做了!循环将进入调用getScore方法的任何函数。(并将其更改为双倍getScore(字符串提示))是的,使用容器和循环。你应该学习零一多规则:编程中唯一的文字数字应该是0和1(可能是-1),以及“多”中的任何数字实例应该是一个容器加循环。你可以使用一个数组而不是五个参数。我猜也不允许使用std:向量。在这种情况下,你不能循环。根据教授的指示,没有数组。相信我,我现在已经这样做了!循环将进入调用getScore方法的任何函数。(并将其更改为double getScore(字符串提示))是的,使用容器和循环。您应该学习零一多规则:编程中唯一的文字数字应该是0和1(可能是-1),以及“多”中的任何数字实例应该是一个容器加循环。我很想知道它是否可行,但我还没有在课堂上学到这一点,并且必须坚持到目前为止所教授的参数。我也不能使用数组。不过谢谢你的建议。如果没有数组或向量就做不到,那也没什么大不了的。它只有几行代码@Gmenfan83:那么你就不能使用循环。我很想知道它是否有效,但我在课堂上还没有学会,并且必须坚持到目前为止所教的参数。我也不能使用数组。不过谢谢你的建议。如果没有数组或向量就做不到,那也没什么大不了的。这只是几行代码。@Gmenfan83:那么就不能使用循环。