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

эта программа предназначена для подсчета голосов от общего числа и от каждого из четырех округов за двух кандидатов. Также отображается победитель. Пользователь должен ввести голоса для каждого округа и кандидатов. Теперь, благодаря вам, ребята, я разобрался с перегибами для указанной выше цели. Но теперь я хочу добавить операторы Cout, которые позволят пользователю указать названия четырех округов и двух кандидатов. а также использование имен для сообщения о результате.

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

Я ценю ваше время!

#include<iostream>
using namespace std;
int tier1();
int main(void)
{
 int return_val = tier1();
 if (return_val < 0) // print an error
 return 0;
}
int tier1(){
 int votes[8];
 int i, j, N; // variables
 int k = 0;
 for (i=0; i<4; i++)
 {
  cout << "county" << i << "\n"; // lists the 4 counties/candidates
  for (j=0; j<2; j++)
{
      cout << "How many votes did the candidate " << j << " get?\n";
      N=0;
       cin >> N;
      votes[k++] = N;;
   }
   if (votes[k-2] + votes[k-1] > 100) //checking if it goes over 100 votes
   {
    cout << "One of the counties has too many votes. Exiting!\n"; // Print an error
    exit(1);
   }

 }

 int candidateOneVotes = 0; //resetting 
 int candidateTwoVotes = 0;
 for (i = 0; i < 8; i = i+2)
 {
 cout << votes[i] << "\n";
 cout << votes[i+1] << "\n";
 candidateOneVotes += votes[i];
 candidateTwoVotes += votes[i+1];
 }
 if (candidateOneVotes > candidateTwoVotes){
 cout << "The winner of the election is " << c0 << "\n";
 }
 else
 {
 cout << "The winner of the election is " << c1 << "\n";
 }
 cout << "Here is the voting results:\n";
 cout << c0 << " got ";
 cout << candidateOneVotes;
 cout << " votes\n ";
 cout << c1 << "got ";
 cout << candidateTwoVotes;
 cout << " votes ";

 return 0;

}

person Garret Trujillo    schedule 29.11.2014    source источник
comment
Вы ведь понимаете, что этот код не скомпилируется?   -  person Captain Obvlious    schedule 29.11.2014
comment
Да, он компилируется и запускается без операторов cout в верхней части. Я просто добавил этот оператор cout в качестве идеи, я знаю, что он неполный и пока не будет компилироваться.   -  person Garret Trujillo    schedule 29.11.2014
comment
Если вы хотите, чтобы программа скомпилировалась и запустилась. Я могу удалить операторы cout и int c0, c1,.... тогда он должен работать   -  person Garret Trujillo    schedule 29.11.2014
comment
Я пошел дальше и отредактировал часть, которую я только что добавил для идеи. в принципе, прямо сейчас программа должна скомпилироваться и запуститься   -  person Garret Trujillo    schedule 29.11.2014
comment
В main лежат комментарии. Вы не печатаете сообщение об ошибке. Вместо этого оператор return связывается с оператором if и выполняется условно.   -  person Thomas Matthews    schedule 29.11.2014


Ответы (1)


Сначала вам нужно извлечь содержимое строковых и векторных заголовков.

#include <string>
#include <vector>

Далее вы захотите обновить объявление tier1, чтобы принять две строки и вектор в качестве аргументов. Это позволит вам передать первое и второе имена кандидатов вместе со списком округов.

int tier1(
    const std::string& c0,
    const std::string& c1,
    const std::vector<std::string>& counties);

Теперь вам нужно обновить main, чтобы прочитать имена кандидатов и округов из cin и передать эти имена в функцию tier1.

int main()
{
    cout << "Welcome to the VoteTime Program. Please do what it tells you.\n";

    std::string c0;
    cout << "Please name the candidate 0. (For example: Bob)\n";
    std::getline(cin, c0);

    std::string c1;
    cout << "Please name the candidate 1. (For example: John)\n";
    std::getline(cin, c1);

    std::vector<std::string> counties;
    for (int i = 0; i < 4; ++i)
    {
        std::string county;
        cout << "Please name county #" << i << '\n';
        std::getline(cin, county);
        counties.push_back(county);
    }


    int return_val = tier1(c0, c1, counties);

    if (return_val < 0) // print an error
        return 0;
}

Теперь вам нужно обновить определение tier1, чтобы оно принимало два строковых аргумента, содержащих имена кандидатов, и вектор, содержащий названия округов. Вместо того, чтобы полагаться на магические числа для определения количества округов, вы можете вызвать функцию-член size вектора.

int tier1(
    const std::string& c0,
    const std::string& c1,
    const std::vector<std::string>& counties)
{
    int votes[8];
    int i, j, N; // variables
    int k = 0;
    for (i = 0; i < counties.size(); i++)
    {
        cout << "county " << counties[i] << "\n";
        for (j = 0; j<2; j++)
        {
            cout << "How many votes did the candidate " << j << " get?\n";
            N = 0;
            cin >> N;
            votes[k++] = N;;
        }
        //checking if it goes over 100 votes
        if (votes[k - 2] + votes[k - 1] > 100)
        {
            cout << "One of the counties has too many votes. Exiting!\n";
            exit(1);
        }

    }

    int candidateOneVotes = 0; //resetting 
    int candidateTwoVotes = 0;
    for (i = 0; i < 8; i = i + 2)
    {
        cout << votes[i] << "\n";
        cout << votes[i + 1] << "\n";
        candidateOneVotes += votes[i];
        candidateTwoVotes += votes[i + 1];
    }
    if (candidateOneVotes > candidateTwoVotes){
        cout << "The winner of the election is " << c0 << "\n";
    }
    else
    {
        cout << "The winner of the election is " << c1 << "\n";
    }
    cout << "Here is the voting results:\n";
    cout << c0 << " got ";
    cout << candidateOneVotes;
    cout << " votes\n ";
    cout << c1 << "got ";
    cout << candidateTwoVotes;
    cout << " votes ";

    return 0;
}
person Captain Obvlious    schedule 29.11.2014
comment
Вау, это определенно полезно! Но мне нужно, чтобы пользователь также указал название округа? - person Garret Trujillo; 29.11.2014
comment
Обновлен ответ, чтобы включить поддержку округов. Если вы не можете использовать std::vector, переключитесь на использование голых массивов и шлепните своего инструктора. - person Captain Obvlious; 29.11.2014
comment
Я определенно ценю вашу помощь. Однако я получил кучу ошибок, таких как ожидаемый неквалифицированный идентификатор перед токеном «‹», ISO C++ запрещает объявление «параметра» без типа, «вектор» не является членом «std», а «округи» не были объявлены в этом объеме. в вашем исходном коде он работал отлично, но после поддержки округов выдал кучу ошибок - person Garret Trujillo; 29.11.2014
comment
Ты забыл #include <vector> :/ - person Captain Obvlious; 29.11.2014
comment
Одна вещь, которую я заметил, это после того, как пользователь добавляет имена для кандидатов. Он спрашивает «сколько голосов получил кандидат 0» вместо того, чтобы называть имя, которое добавил пользователь? Я не уверен, как подойти к этому. в конце концов, он говорит имя, которое добавил пользователь. только не тогда, когда он спрашивает. Но для округов это сработало отлично - person Garret Trujillo; 29.11.2014