2016-05-16 3 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; 
} 

Что не так с моим кодом? ошибка в строке 29, 30, 31, 35, 36, 37 ожидаемое выражение перед «pessoa» У меня возникают проблемы с моими структурами. Вероятно, это что-то связано с [i]. У меня естьСтруктуры и указатели в C

+1

и мы должны считать строку 29.30.31 .....? –

+0

Вы знакомы с 'malloc()'? Если это так, вам нужно будет использовать это для создания массива элементов 'pessoa' на основе' numeroalunos'. Затем вы можете использовать эту переменную для хранения входов 'scanf' и' printf' в финальном цикле. –

+0

Извините, я не знал, что стек не показывает номер строки. – Kingdessacaralha

ответ

2

В вашем коде pessoa - это тип, а не имя переменной. Таким образом, вы не сможете писать

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

Вы можете использовать переменную типа pessoa.

Сказав это, C использует значение pass-by для передачи параметров функции. Они, как вы передаете c1 (нормальная переменная) от main() и попытайтесь заселить это в leitura() не собираетесь обслуживать то, что вы возможно хотите. Вам необходимо передать массив типа pessoa от main() и использовать его внутри leitura().

+2

Но' c1' не является массивом, это всего лишь один pessoa. – Barmar

+0

@ Бармар. Я пропустил этот момент. Позвольте мне уточнить мой ответ, чтобы устранить недостаток. –

+0

@MrLister Ну, что мы не знаем. 'pessoa * p = malloc (numeroalunos * sizeof * p)' и вы все настроены. :) –

Смежные вопросы