C中的结构和指针

时间:2016-05-16 17:51:40

标签: c arrays struct

#include <stdio.h>
#include <string.h>

typedef struct Pessoa{
    char nome[150];
    struct Datanasc{
        int dia;
        int mes;
        int ano;
    } datanasc;
    char genero;
    char pref;
} pessoa;

typedef struct Aresta{
    int *pont;
    int *pont2;
    int peso;
} aresta;

void leitura(struct Pessoa c1){
    printf("Entrei sua vagabunda\n");
    int diaatual,mesatual,anoatual;
    int numeroalunos;
    int i;
    scanf("%d/%d/%d",&diaatual,&mesatual,&anoatual);
    scanf(" %d",&numeroalunos);
    for(i=0;i<numeroalunos;i++){
        scanf(" %[^\n]s", pessoa[i].nome);
        scanf(" %d/%d/%d", &pessoa[i].datanasc.dia,&pessoa[i].datanasc.mes,&pessoa[i].datanasc.ano);
        scanf(" %c %c", &pessoa.genero[i],&pessoa.pref[i]);
    }
    for(i=0;i<numeroalunos;i++){
        printf(" %[^\n]s", pessoa[i].nome);
        printf(" %d/%d/%d", pessoa[i].dia,pessoa[i].mes,pessoa[i].ano);
        printf(" %c %c", pessoa[i].genero,pessoa[i].pref);
    }
    return;
}
int main(){
    pessoa c1;
    leitura(c1);
    return 0;
}

我的代码出了什么问题? 第29,30,31,35,36,37行中的错误 - “pessoa”之前的预期表达 我的结构遇到了麻烦。可能它与我[i]的相关性

1 个答案:

答案 0 :(得分:2)

在您的代码中,pessoa是一种类型,而不是变量名称。所以,你不可能写

 scanf(" %[^\n]s", pessoa[i].nome);

您可能希望使用pessoa类型的变量。

话虽如此,C使用pass-by值进行函数参数传递。他们从c1传递main()(正常变量),并尝试填充leitura()中不会提供您可能想要的内容。您需要从pessoa传递main()类型的数组,并在leitura()内使用。