Когда вы выделяете память для переменной, не присваивая ей значение, оно будет мусорным. Это означает, что вы не можете быть в этом уверены.
В C ++ вы всегда должны инициализировать вашу переменную.
Более того, я думаю, вы имели в виду while (!scores.fail())
вместо while (scores.fail())
Если вы хотите еще один способ сортировки своих результатов, вы можете сделать что-то вроде этого:
#include <iostream>
#include <map>
#include <vector>
int main()
{
int rangeStep = 10;
std::map<int, size_t> sortedScores;
std::vector<int> scores { 76, 89, 150, 135, 200, 76, 12, 100, 150, 28, 178, 189, 167, 200, 175, 150, 87, 99, 129, 149, 176, 200, 87, 35, 157, 189 };
for (int score : scores)
{
++sortedScores[score / rangeStep];
}
for (const auto& element : sortedScores)
{
std::cout << "Range [" << element.first * rangeStep << "," << (element.first + 1) * rangeStep << "] => " << element.second << std::endl;
}
std::cin.get();
return 0;
}
Какие выходы
Range [10,20] => 1
Range [20,30] => 1
Range [30,40] => 1
Range [70,80] => 2
Range [80,90] => 3
Range [90,100] => 1
Range [100,110] => 1
Range [120,130] => 1
Range [130,140] => 1
Range [140,150] => 1
Range [150,160] => 4
Range [160,170] => 1
Range [170,180] => 3
Range [180,190] => 2
Range [200,210] => 3
Ваш синтаксический анализ файлов тоже неправильный, вы можете использовать что-то вроде:
std::vector<int> ReadScoresFromFile(const std::string& p_filename)
{
std::vector<int> result;
std::fstream file(p_filename);
std::string line;
while (getline(file, line))
{
std::stringstream linestream(line);
std::string value;
while (getline(linestream, value, ','))
{
result.push_back(std::atoi(value.c_str()));
}
}
return result;
}
и сохраните результат в переменной std::vector<int> scores
.