用c语言打印对象数组
我希望有人能告诉我如何用c语言打印带有对象的数组 这是我的代码:用c语言打印对象数组,c,C,我希望有人能告诉我如何用c语言打印带有对象的数组 这是我的代码: typedef struct{ int user_id; char username[100]; char password[100]; int ano_nascimento; } Utilizador; int main(){ Utilizador lista[50]; FILE *fb = fopen("utilizadores.dat","a"); int i=0;
typedef struct{
int user_id;
char username[100];
char password[100];
int ano_nascimento;
} Utilizador;
int main(){
Utilizador lista[50];
FILE *fb = fopen("utilizadores.dat","a");
int i=0;
Utilizador a;
while( fread(&a,sizeof(a),1,fb) > 0 )
lista[i++]=a;
int n;
printf("\nMenu\n\n1 - Criar Novo Utilizador\n2 - Listar Utilizadores\n3 - Apagar Utilizador\n0 - Sair\n\n");
scanf("%d",&n);
switch(n){
case 1: a = introduzir_utilizador();
fwrite (&a,sizeof(a),1,fb);
fclose(fb);
break;
case 2:for(int i=0; i!=sizeof(lista); i++){
printf("%d %s %s %d",lista[i].user_id,lista[i].username, lista[i].password, lista[i].ano_nascimento);
printf("\n");
}
case 3:;
case 4:;
case 0:;
default: ;
}
}
这里的问题是打印名为“lista”的数组,该数组中有“utilizadore”问题是您没有记录正在保存的“utilizadore”数量。试试这个:
int records = 0; // we need this to keep track of how many records we have
case 1:
a = introduzir_utilizador();
fwrite(&a, sizeof(a), 1, fb);
fclose(fb);
records++; // we have one more record
break;
及
这样做,您将只显示“lista”的有效元素
同样适用于:
while (fread(&a, sizeof(a), 1, fb) > 0)
lista[i++] = a;
跟踪您已读取的“Utilizadore”数量,并将其添加到记录变量中:
while (fread(&a, sizeof(a), 1, fb) > 0)
{
lista[i++] = a;
records++; // we've read another record
}
顺便说一句,我知道你计划删除“utilizadores”。
请记住减少“记录”的计数。请参阅。您是否阅读了
sizeof
运算符的用途?什么是不清楚的?您的循环(int i=0;…具有块作用域的i
,但是使用相同的变量名很容易混淆。我建议for(int j=0;j
在第一个循环之后,i
具有数组中的项目计数。您应该将该数字复制到另一个变量,例如int count=i;
然后您可以在案例2中的for
循环中使用该count
。
while (fread(&a, sizeof(a), 1, fb) > 0)
{
lista[i++] = a;
records++; // we've read another record
}