簡體   English   中英

無效的插入/列表不起作用-C

[英]Void Insert/List not working - C

當我在程序中插入2個或更多人時,當我嘗試列出結果時,我只會得到我插入的第二個人的名字。

我想插入盡可能多的人,並列出所有的namoes和財產。.然后,我想確定我正在耕ser的房屋的平均年齡。

這是我的插入/列表代碼:

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);
    }
  }
}

在函數inserir ,您可以讓用戶while (C1 != C) { ...在循環中輸入多個日期,但inserir每個輸入存儲在結構的同一數據成員中。 因此,就像您始終在同一位置寫入內容一樣,第二個輸入將覆蓋第一個輸入。

我想這個數據成員Casa.NomePessoas應該是字符串數組,而不是單個字符串,這樣您就可以編寫例如scanf("%s",Casa.NomePessoas[C1]) 當然,這也適用於Casa.Idade

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM