我试图让用户将标记(整数值)输入两个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。如何解决此问题?
答案 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
,这是从字符串读取的非常有用的类。因此,此代码首先读取一行文本,然后从该文本行读取整数。