Как создать переменную для количества кандидатов, которые вводит пользователь

#c

#c

Вопрос:

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

 #include <stdio.h>
int main()
{
//2d array that will hold the names of the candidates
    char cand[100][1000];
//The following could has the user enter the the names of the
//candidates. It places a  character at the end of each name
    printf("How many candidates are in the race? ");
//Holds the number of candidates in the race
    int numCand;
    scanf("%i",amp;numCand);
//get rid of the return from the scanf above
    getchar();
//Get the names of the candidates
    int row = 0;
//one name per row and go until we have the number of candidates
    while(row < numCand)
    {
        printf("Please enter the name candidate number %i: ",row 1);
//get the first character of the name
        char cur = getchar();
        int col = 0;
//while they haven't hit enter get the next character
        while(cur != 'n')
        {
            cand[row][col] = cur;
            cur = getchar();
            col = col  1;
        }
//add the  character at the end of the useful info in the array
        cand[row][col]='';
        row = row   1;
    }
//Finally ask them how many people will be voting
    printf("How many people will be voting? ");
    int numVoters;
    scanf("%i",amp;numVoters);
    printf("n**********VOTING WILL COMMENCE NOW***********n");
    /*YOU WORK GOES BELOW HERE*/
    int i;
    i = 0;
    int j;
    j = 0;
    int k;
    k=1;
    int l;
    l =1;
    int v;
    v = 0;
    int vote[numCand];

    while (i < numVoters)
    {
        i = i 1;
        printf("Hello voter %i the candidates are: n", i);
        while (j < numCand)
        {

            printf("t Candidate number %i is nt %s n", k, cand[j]);
            int cand[j];
            cand[j] = l;
            l=l 1;
            k=k 1;
            j=j 1;
        }
        j=0;
        k=1;
        printf("Who would you like to vote for? (enter candidate number) ");
        scanf("%i", amp;vote[v] );
        v = v 1;

    }
    i = 0;
    while(i < numVoters)
    {

    i = i 1;
    }
printf("The results are:n");


}
  

Комментарии:

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

2. Сталкивались ли вы с динамическим распределением памяти с malloc() помощью et al? Это очевидный способ решения проблемы.

3. Я думаю, что вы используете char cand[100][1000]; для хранения информации о кандидате и int vote[numCand]; для хранения количества голосов за кандидата, если это так, то вместо того, чтобы использовать scanf("%i", amp;vote[v] ); declare переменную для чтения номера кандидата, который нравится int cand_num; , и использования scanf("%i", amp;cand_num ); и увеличения голосов этого кандидата vote[cand_num] после того, как все будет сделано, используйте for(int c =0; c<numCand;c ) printf("Cand =%s, votes=%dn",cand[c],vote[c]); , не забудьте убедиться vote , что в массиве все равно ноль, прежде чем использовать

Ответ №1:

Это кажется слишком большой программой для небольшой проблемы, рассмотрите возможность использования struct , с проблемой будет легко справиться.

 #include<stdio.h>
#define BUFFER 50
#define MAX_VOTES 1000
#define NUM_OF_CANDIDATES 50

struct Candidate 
{
    char Name[BUFFER];
    int Id;
    int Votes;
};

void ReadCandidateInfo(struct Candidate *Cand, unsigned int num_cand);
void StartVoting(struct Candidate *Cand, unsigned int num_cand);
void AnnounanceResult(struct Candidate *Cand, unsigned int num_cand);

void ReadCandidateInfo(struct Candidate *Cand, unsigned int num_cand)
{

    
}

void StartVoting(struct Candidate *Cand, unsigned int num_cand)
{
    
}

void AnnounanceResult(struct Candidate *Cand, unsigned int num_cand)
{
    
}

int main() 
{
   struct Candidate Cand[NUM_OF_CANDIDATES];
   // Read Name and Id and set Votes to 0 first
   ReadCandidateInfo(Cand,sizeof(Cand)/sizeof(Cand[0]));
   // take input for voting for candiates based on Id or Name
   StartVoting(Cand,sizeof(Cand)/sizeof(Cand[0]));
   // Finally Announce the Result
   AnnounanceResult(Cand,sizeof(Cand)/sizeof(Cand[0]));
   return 0;
}
  

Комментарии:

1. Вы только что перепроектировали всю программу, не объяснив, что должен делать этот человек или почему. Таким образом, это выглядит как ответ только для кода. Но на самом деле это также не отвечает на вопрос. Так что это в основном комментарий.

2. @paddy мой ответ — это своего рода предложение улучшить программу, и я намерен сообщить ему о важности структурированного и читаемого кода, он мог бы реорганизовать код после исправления ошибки.

3. @IrAM — ваши предложения конструктивны, и ваш ответ (подчеркивающий примеры кода, а не «объясняющий материал») может быть именно тем, что нужно OP. Спасибо за вклад 🙂