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

问题描述 投票:-1回答:2

我试图允许用户在两​​个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.如何解决此问题?

c++ list stl
2个回答
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,这是一个非常有用的类来读取字符串。因此,此代码首先读取一行文本,然后从文本行中读取整数。


0
投票

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

#include <iostream>

int main()
{
    char a  = '1';
    int b = a;
    std::cout << b << std::endl;
}
© www.soinside.com 2019 - 2024. All rights reserved.