Как получить результаты из TXT-файла, а затем суммировать его? - PullRequest
0 голосов
/ 23 октября 2019

Я пишу электронную систему голосования и, в конце концов, хочу показать на экране процентные результаты, а не цифры для кандидатов. Поэтому я собрал все в файл. Это выглядит так: "results.txt"

Джессика: 2

Аманда: 3

Майкл: 0

Сэм: 0

Алекс: 1

Нанси: 0

и после этого я могу взять эти числа, чтобы сложить их и преобразовать в процент? Я не знаю, как это реализовать.

Это часть программы:

ofstream VotingResults ("results.txt", ios::app);

cout<<"Please enter a number for whom you give your vote: ";

        cin >> choice;

          switch (choice)
          {
                 case 1: 
                      Vote(Jessica);
                      cout<<"Press any button to get the results";
                      break;
                 case 2:
                      Vote(Amanda);
                        cout<<"Press any button to get the results";
                      break;
                 case 3:
                      Vote(Michael);
                      cout<<"Press any button to get the results";
                      break;
                 case 4:
                        Vote(Sam);
                        cout<<"Press any button to get the results";
                        break;
                case 5:
                        Vote(Alex);
                        cout<<"Press any button to get the results";
                        break;
                case 6:
                        Vote(Nancy);
                        cout<<"Press any button to get the results";

                        break;
                default:
                    cout<<"Invalid number! Press any button to get the results";
                        break;
                    }

    VotingResults.open("results.txt");
          VotingResults << "Jessica: " << Jessica << endl
                 << "Amanda: " << Amanda << endl
                 << "Michael: " << Michael << endl
                 << "Sam: " << Sam << endl
                 << "Alex: " << Alex << endl
                 << "Nancy: " << Nancy << endl;
          VotingResults.close();


void Vote(int &a)
{
     a += 1;
     cout << "\n\t\tThank you for your vote! ";
}

1 Ответ

0 голосов
/ 24 октября 2019

Я рекомендую использовать std::map для этого:

std::map<std::string, int> database;
//...
std::string voter_name;
std::int    voter_number;
while (std::getline(Voting_Results, voter_name, ':'))
{
   Voting_Results >> voter_number;
   if (database.find(voter_name) != database.end())
   {
       database[voter_name]++;
   }
   else
   {
       database[voter_name] = 0;
   }
}

Если имя существует на карте, поле значения увеличивается. Поле значения будет представлять количество голосов (или вхождений).

Номер, связанный с избирателем, читается, но не используется, чтобы синхронизировать чтение.

...