2014-09-04 46 views
0

一切似乎工作正常,除了我的SPOILED票int是停留在0,而不是由功能更新。我曾嘗試加入的指針認爲它會指向對象,它的功能之外,但++函數未更新功能不更新int字段

#include <stdio.h> 

struct candidates 
{ 
char name[20]; 
int votes; 
}; 
struct candidates electionCandidates[7]; 

void Initialize(struct candidates EC[]); 
void Processvotes(struct candidates EC[], int *BadVote); 
void printResults(struct candidates EC[], int *BadVote); 

int main() 

{ 

    int i, SPOIL = 0; 

    Initialize(electionCandidates); 
    Processvotes(electionCandidates, &SPOIL); 
    printResults(electionCandidates, &SPOIL); 

    for(i = 0; i < 7; i++) 
    { 
     printf("%s",electionCandidates[i].name); 
     printf("%d\n\n",electionCandidates[i].votes); 
    } 

    printf("%d", SPOIL); 

} 

void Initialize(struct candidates EC[]) 
{ 
    int i; 

    FILE *fp; 
    fp = fopen("elections.txt", "r"); 

    for (i = 0; i < 7; i++) 

    { 
     fgets(EC[i].name, 20, (FILE*)fp); 
    } 

    fclose(fp); 
} 


void Processvotes(struct candidates EC[], int *BadVote) 
{ 
     int TVOTE, i; 

     FILE *fp; 
     fp = fopen("elections.txt", "r"); 

     for (i = 0; i < 7; i++) 
     { 
      fgets(EC[i].name, 20, (FILE*)fp); 
     } 

     for (i = 0; i < 365; i++) 
     { 
      fscanf(fp, "%d", &TVOTE); 

      if (TVOTE == 1) 
       EC[0].votes++; 
      if (TVOTE == 2) 
       EC[1].votes++; 
      if (TVOTE == 3) 
       EC[2].votes++; 
      if (TVOTE == 4) 
       EC[3].votes++; 
      if (TVOTE == 5) 
       EC[4].votes++; 
      if (TVOTE == 6) 
       EC[5].votes++; 
      if (TVOTE == 7) 
       EC[6].votes++; 

      if (TVOTE < 1 || TVOTE > 7) 
       *BadVote++; 
     } 

     fclose(fp); 
} 

void printResults(struct candidates EC[], int *BadVote) 
{ 

    int i, Win = 0, WinSCORE = 0, Runner = 0, RunnerSCORE = 0; 

    for (i = 0; i < 7; i++) 
    { 

     if (EC[i].votes > WinSCORE) 
     { 
      WinSCORE = EC[i].votes; 
      Win = i; 
     } 

     if (EC[i].votes == WinSCORE) 
     { 
      RunnerSCORE = EC[i].votes; 
      Runner = i; 
     } 
    } 


    if (WinSCORE == RunnerSCORE) 
    { 
     printf("There was a tie between %s and %s who both got a total of %d votes each. There were %d spoiled votes\n", EC[Win].name, EC[Runner].name, WinSCORE, *BadVote); 
    } 

    else 
     printf("%s won the election with a total of %d votes. There was a total of %d spoiled votes.\n", EC[Win].name, WinSCORE, *BadVote); 


} 

任何幫助將不勝感激。

+0

忽略printf語句中名爲vote和spoil的main循環,檢查值是什麼。 – Sclaar 2014-09-04 20:56:17

+0

使用開關盒代替如此長的系列,如果您使用默認情況。隨着建議(* BadVotes)++; – 2014-09-04 21:08:16

回答

4

後綴++運算符優先於*;當你寫*BadVote++時,你實際上增加了指針,而不是指向的值。你應該改寫(*BadVote)++。有關更多信息,請參閱this question

+0

哦,好的。總是這麼簡單。非常感謝你。 – Sclaar 2014-09-04 21:01:12

0

我很確定這是運營商的優先權問題。試試這個: if(TVOTE < 1 || TVOTE> 7) (* BadVote)++;