无效插入/列表不起作用 - C.

时间:2018-01-15 18:28:26

标签: c

当我在程序中插入2个或更多人时,当我尝试列出结果时,我只会得到我插入的第二个人的姓名。

我想插入尽可能多的人,并列出所有的namoes和属性..然后我想做我所用的房子的平均年龄。

这是我的插入/列表代码:

void inserir()
{
  FILE *fCasa; //Apontador para ficheiro
  fCasa = fopen(NomeFicheiro, "rb+");
  if (fCasa == 0) {
    fCasa = fopen(NomeFicheiro, "wb");
    fclose(fCasa);
    fCasa = fopen(NomeFicheiro, "rb+");
  }
  //Ficheiro aberto e pronto para ler/escrever

  struct defCasa Casa;
  int C = 0;
  int C1 = 0;
  printf("\nNumero da Porta:");
  scanf("%d",&Casa.NumeroPorta);
  printf("Numero de Pessoas:");
  scanf("%d",&Casa.NumeroPessoas);
  C = Casa.NumeroPessoas;
  while (C1 != C) {
    C1++;
    printf("Nome da %da Pessoa:", C1);
    scanf("%s",Casa.NomePessoas);
    printf("Idade da Pessoa:");
    scanf("%d",Casa.Idade);

  }
  printf("Contacto da casa:");
  scanf("%d",&Casa.NumTlm);

  Casa.estado = 1;
  fseek(fCasa, 0, SEEK_END);
  fwrite(&Casa, 1, sizeof(struct defCasa), fCasa);
  fclose(fCasa);
}


void listar ()
{
  int C = 0;
  int C1 = 0;
  int NrRegistos = 0;
  int AcumuladoPessoas = 0;
  FILE *fLer;
  fLer = fopen(NomeFicheiro, "rb+");
  if (fLer != 0) {
    struct defCasa Armazena;
    fseek(fLer, 0,SEEK_SET);
    while (fread(&Armazena, 1, sizeof (struct defCasa), fLer) != 0) {
      if (Armazena.estado == 1) {
        printf("Na Casa %d moram %d pessoas\n", Armazena.NumeroPorta,Armazena.NumeroPessoas);
        C = Armazena.NumeroPessoas;
        C1 = 0;
        while (C1 != C) {
          C1++;
          printf("Constituintes da familia: %s\n",Armazena.NomePessoas);
        }
        printf("Contactos:%d",Armazena.NumTlm);
        NrRegistos++;
        AcumuladoPessoas += Armazena.MaximoNumeroPessoas;
      }
    }

    fclose(fLer);
    if (NrRegistos > 0) {
      printf("\nA media de idades e: %f\n", (float)AcumuladoPessoas/NrRegistos);
    }
  }
}

1 个答案:

答案 0 :(得分:0)

在函数inserir中,您允许用户在循环while (C1 != C) { ...中输入多个日期,但是您将每个输入存储在结构的同一数据成员中。 因此,当您总是写入同一个地方时,第二个输入会覆盖第一个输入。

我认为这个数据成员Casa.NomePessoas应该是一个字符串数组而不是一个字符串,这样你就可以编写scanf("%s",Casa.NomePessoas[C1]);当然,这同样适用于Casa.Idade