#include #include typedef struct{ char modelo[30]; int ano; float valor; }t_carro; int main(int argc, char *argv[]) { int i, qte = 0; char opcao; t_carro *pc; //cria ponteiro para tipo t_carro system("color 70"); //cor da tela pc = malloc(sizeof(t_carro)); //aloca espaco de tamanho correspondente ao da struct, para o qual pc aponta puts("informe modelo, ano e valor"); fflush(stdin); gets(pc->modelo); //Pega o valor correspondente ao modelo da struct que pc aponta fflush(stdin); scanf("%d",&pc->ano); //Pega o valor correspondente ao ano da struct que pc aponta fflush(stdin); scanf("%f",&pc->valor); //Pega o valor correspondente ao valor da struct que pc aponta qte++; //após cadastrar - contabiliza um carro cadastrado (qte = quantidade) printf("\nModelo: %s\nAno:%d\nValor: %f\n",pc->modelo,pc->ano,pc->valor); puts("\nDeseja cadastrar outro? s/n"); fflush(stdin); scanf("%c", &opcao); while(opcao == 's'){ qte++; //A quantidade aumenta realloc(pc, qte*sizeof(t_carro)); //Precisará de mais espaço -> realocará para que: espaço = quantidade de carros atual * tamanho da struct //printf("modelo: %s\n ano:%d\n valor: %f\n",pc->modelo,pc->ano,pc->valor); pc++; //move o ponteiro uma casa a frente, para salvar o carro (equivalente a um i++ se fosse pc[i]) puts("\nInforme modelo, ano e valor"); fflush(stdin); gets(pc->modelo); fflush(stdin); scanf("%d", &pc->ano); fflush(stdin); scanf("%f", &pc->valor); printf("\nModelo: %s\nAno:%d\nValor: %f\n", pc->modelo, pc->ano, pc->valor); //printf("\nALOHA: %d\n", ((pc-2)->ano)); // teste puts("\nDeseja cadastrar outro? s/n"); fflush(stdin); scanf("%c", &opcao); } pc -= qte-1; //Para imprimir as informaçoes desde o inicio, subtrai a quantidade cadastrada, mas soma 1 para chegar ao primeiro. for(i = 0; i < qte; i++){ printf("\n--- Carro numero %d ---", i+1); printf("\nModelo: %s\nAno:%d\nValor: %f\n", pc->modelo, pc->ano, pc->valor); pc++; } return 0; }