2016-05-16 25 views
-1
#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; 
} 

私のコードには何が問題なのですか? "pessoa"の前の29,30,31,35,36,37の予想される式の行にエラーがあります 私の構造に問題があります。おそらくそれは私が持っているものに関連していますCの構造体とポインタ

+1

と29.30.31行を数えます.....? –

+0

あなたは 'malloc()'に慣れていますか?もしそうなら、これを使って 'numeroalunos'に基づいて' pessoa'の配列を作成する必要があります。次に、その変数を使用して 'scanf'入力と' printf'を最後のforループに格納することができます。 –

+0

申し訳ありませんが、スタックの番号が表示されませんでした。 – Kingdessacaralha

答えて

2

あなたのコードでは、pessoaは変数名ではなく型です。だから、あなたはおそらくあなたがタイプpessoaの変数を使用したい場合があり

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

を書き込むことはできません。

これは、Cは、関数のパラメータ渡しにパスバイ値を使用するということです。あなたはc1(通常の変数)をmain()から渡して、それを埋め込むようにしてください。leitura()は、とおそらくが必要です。 pessoaの配列をmain()から渡して、leitura()の内部で使用する必要があります。

+2

' c1'は配列ではなく、単なる 'pessoa'です。 – Barmar

+0

@Barmar右、私はその点を逃した。欠点を取り除くために私の答えを更新しましょう。 –

+0

@MrListerさて、私たちは分かりません。 'pessoa * p = malloc(numeroalunos * sizeof * p)'そしてあなたはすべて設定されています。 :) –

関連する問題