[英]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.