分配给具有数组类型的表达式并请求不是结构或联合的成员

Assignment to expression with array type AND request for member in something not a structure or union

我正在尝试声明我的结构类型的变量并出现此错误,代码是关于选举的。 CANDIDATO 是一个葡萄牙语单词,意思是候选人,我想我不需要翻译这么多

struct candidatos{
    int  numCandidato;
    char nomeCandidado[10];
    char partidoCandidato[3];
    char cargoCandidato[1];
     int votos;
    float porcentagem;
};
struct candidatos listar[11];

int main(){
    //CANDIDATO 01
    listar[0].numCandidato = 111;
    strcpy(listar[0].nomeCandidado, "ABC");
    strcpy(listar[0].partidoCandidato, "ABC");
    strcpy(listar[0].cargoCandidato, "ABC");
    listar[0].votos = 0;
}

////ERROR START'S HERE


int iniciarVotacao(){

    struct candidatos presidente; 
    struct candidatos deputado;
    int votoPresidente = 0;
    int votoDeputado = 0;
    int i = 0;

    presidente.nomeCandidado = 0; //°1 erro
    deputado.numCandidato = 0; // erro

    printf("Número do candidato para a Presidência => ");
    scanf("%d", &votoPresidente);
    printf("\nNúmero do candidato para Deputado => ");
    scanf("%d", &votoDeputado);

    for(i = 0 ; i < 11 ; i++){
            if(listar[i].numCandidato == votoPresidente && listar.numCandidato < 50){
                presidente = listar[i];
            }// 2° erro acontece
            if(listar[i].numCandidato == votoPresidente && listar.numCandidato > 1000){
                deputado = listar[i];
            }
    }

我已经更正了您所关心的错误。以下是更正后的版本:

#include <stdio.h>
#include <string.h>

struct candidatos{
  int  numCandidato;
  char nomeCandidado[10];
  char partidoCandidato[4];
  char cargoCandidato[4];
  int votos;
  float porcentagem;
} listar[11];

int main(){
  //CANDIDATO 01
  listar[0].numCandidato = 111;
  strcpy(listar[0].nomeCandidado, "ABC");
  strcpy(listar[0].partidoCandidato, "ABC");
  strcpy(listar[0].cargoCandidato, "ABC");
  listar[0].votos = 0;
}

int iniciarVotacao(){
  struct candidatos presidente;
  struct candidatos deputado;

  int votoPresidente = 0;
  int votoDeputado = 0;
  int i = 0;

  presidente.nomeCandidado[0] = '0';
  deputado.numCandidato = 0;

  printf("Número do candidato para a Presidência => ");
  scanf("%d", &votoPresidente);
  printf("\nNúmero do candidato para Deputado => ");
  scanf("%d", &votoDeputado);

  for(i = 0 ; i < 11 ; i++){
    if(listar[i].numCandidato == votoPresidente && listar[i].numCandidato < 50){
      presidente = listar[i];
    }// 2° erro acontece
    if(listar[i].numCandidato == votoPresidente && listar[i].numCandidato > 1000){
      deputado = listar[i];
    }
  }
}

您在 presidente.nomeCandidado = 0; 中的第一个错误是因为您试图将整数值分配给数组指针。您必须事先为数组编制索引。

根据您的代码 listar[i].numCandidato

listar 是一个结构数组。您不能在稍后阶段将其仅视为一个结构,而不是一个结构数组。正如您在 for 循环中所做的那样,listar.numCandidato。那也必须改变。

您还错误地在 candidatos 结构定义中分别为 partidoCandidatocargoCandidato 声明了 3 个和 1 个索引。它们必须至少为 4,因为您要分配它们 ABC。其中包含 3 个字符和一个为空终止符保留的额外字符 [=19=],表示数组的结尾。

作为旁注。由于您在全局声明 listar[11] 后立即定义了它使用的结构。为什么不直接在 candidatos 结构的右方括号之后声明它,而不是写一个新行?正如我上面所做的。