将多个输入存储到STL列表中

时间:2018-08-31 10:22:23

标签: c++ list stl

我试图让用户将标记(整数值)输入两个STL列表:Year1Marks和Year2Marks。然后,我想对Year1Marks和Year2Marks进行排序。然后,我将两个列表合并到第三个列表(FinalMarksList)中,然后计算平均值。

这是我的代码:

list <int> Year1Marks, Year2Marks;
list <int> FinalMarksList;

char y1m;
cout << "\nEnter First Year Marks. Press Enter to stop.\n";

do
{
    y1m = getchar();
    Year1Marks.push_front(y1m);

} while(y1m!='\n');

char y2m;
cout << "\nEnter Second Year Marks. Press Enter to stop.\n";

do
{
    y2m = getchar();
    Year2Marks.push_front(y2m);

} while(y2m!='\n');


Year1Marks.sort();
Year2Marks.sort();

FinalMarksList.merge(Year1Marks);
FinalMarksList.merge(Year2Marks);

int count = 0;
int sum = 0;

if (!FinalMarksList.empty())
{
    for (auto it = FinalMarksList.begin(); it != FinalMarksList.end(); ++it) {
        sum += *it;
        ++count;
    }
}

cout << "Average: " << (sum / count);

问题是这不能正常工作。如果我在Year1Marks中输入1,在Year2Marks中输入1,则输出为44。如何解决此问题?

2 个答案:

答案 0 :(得分:0)

输出奇怪的原因是您将输入读取为char,并将它们存储为整数。尝试运行以下代码:

#include <iostream>

int main()
{
    char a  = '1';
    int b = a;
    std::cout << b << std::endl;
}

答案 1 :(得分:0)

您需要整数,但是选择char。解决方法是使用int。我猜您选择了char是因为您无法解决如何读取直到换行符的整数的问题。但是,实际上,您应该首先以正确的方式进行操作,而不是走错路,即使乍一看似乎比较容易。

这是读取整数行的方式。

#include <sstream>

cout << "\nEnter First Year Marks. Press Enter to stop.\n";
string line;
getline(cin, line);
istringstream buffer(line);
int y1m;
while (buffer >> y1m)
{
    Year1Marks.push_front(y1m);
}

此代码使用istringstream,这是从字符串读取的非常有用的类。因此,此代码首先读取一行文本,然后从该文本行读取整数。