Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用c语言打印对象数组_C - Fatal编程技术网

用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;

我希望有人能告诉我如何用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;
    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
}