Хранение нескольких входов в список STL - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь разрешить пользователю вводить метки (целочисленные значения) в два списка 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);

Проблема в том, что это не работает правильно. Если я введу 1 в Year1Marks и 1 в Year2Marks, получится 44. Как это исправить?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы хотите целые числа, но вы выбираете 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 голосов
/ 31 августа 2018

Причиной странного вывода является то, что вы читаете ввод как символы и сохраняете их как целые числа. Попробуйте запустить следующий фрагмент кода:

#include <iostream>

int main()
{
    char a  = '1';
    int b = a;
    std::cout << b << std::endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...