我试图允许用户在两个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.如何解决此问题?
你想要整数,但你选择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
,这是一个非常有用的类来读取字符串。因此,此代码首先读取一行文本,然后从文本行中读取整数。
输出奇怪的原因是您将输入读取为字符,并将它们存储为整数。尝试运行以下代码:
#include <iostream>
int main()
{
char a = '1';
int b = a;
std::cout << b << std::endl;
}