Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

como fazer um vetor de tamanho variavel

olá, meu prof mandou para casa este codigo e queria que ao inves de adicionar 5 clientes diretos, queria que o usuario que decidisse se queria ou nao inserir mais um... tentei e nao consegui de jeito nenhum :( sempre dava algum problema... entao queria saber se alguem consegueria me ajudar (obs: nao vale perguntar antes quantos clientes desejam ser inseridos)

MAIN:

#include <stdio.h>
#include <stdlib.h>
#include "rotinas.h"

int main()
{
    T_Ficha clientes[5];
    int opcao =0;

    do {
        system("cls");
        printf("\n1-Inserir");
        printf("\n2-Exibir");
        printf("\n3-Excluir");
        printf("\n4-consultar");
        printf("\n0-Sair");

        scanf("%d", &opcao);

        switch (opcao) {
            case 1:inserir(clientes,5);
                break;
            case 2: exibir(clientes,5);
                break;
            case 3:
                break;
            case 4: consultar(clientes,5);
                break;
            case 0:printf("\nEncerrando o programa.");
                break;
        };
    } while (opcao != 0);



    system("pause>null");
}

ROTINAS.h

struct r_ficha {
    char cpf[11];
    float renda;
};
typedef struct r_ficha T_Ficha;

void inserir(T_Ficha plista[], int ptamanho) {
    int conta;
    char confirma;


    for(conta = 0; conta < ptamanho; conta++) {
            printf("\n\n Ficha numero %d", conta+1);
            printf("\n CPF: ");
            scanf("%s",&plista[conta].cpf);
            printf("\n Renda: ");
            scanf("%f", &plista[conta].renda); 
            system("cls");
    }

}

void exibir(T_Ficha plista[], int ptamanho) {
    int conta;
    printf("\n==Imprimindo...");
    for(conta = 0; conta < ptamanho; conta++){
        printf("\n Ficha numero %d", conta+1);
        printf("\n CPF: %s",plista[conta].cpf);
        printf("\n Renda: %5.2f",plista[conta].renda);
    }

    system("pause");

}

void consultar(T_Ficha plista[], int ptamanho) {
    int conta;
    char consulta[11];
    printf("\n==Imprimindo...");
    printf("\nDigite o numeor do cpf para consultar: ");
    scanf("%s",&consulta);


    system("pause");

}

agradeço demais quem puder me ajudar!

4 respostas
solução!

Cara não sei ao certo se é viável, mas pensei em criar uma função pra colocar esse switch, e após ele ser chamado, você pergunta ao usuário se ele quer adicionar mais alguém, com alguma condição, e se sim, você retorna novamente a função. O que acha?

Pra criar vetores com tamanho variado. É necessário usar alocação dinâmica. As funções em C que fazem isso são malloc e calloc. O uso delas envolve ponteiros de memória. Aconselho avançar um pouco mais no curso antes de pensar em como fazer. Por enquanto da pra alocar um vetor com muitos espaços e só usar uma quantidade de espaços dentre eles de acordo com a execução e parâmetros de entrada.

Tamanho variado de vetores o interessante é com alocação dinâmica. Não sei se você já passou por esta aula que tem como funções malloc e calloc. Mas em relação ao código esta bacana.

gente mt obrigado pelas respostas, demorei pois estava em epoca de provas... acabou que ele na verdade queria um vetor fixo com tamanho grande por exemplo 100, e um do-while que rodasse até o usuario digitar N(nao) para cancelar.

vou dar a soluçao pra michelle pq foi a primeira a responder, mas todas foram bem esclarecedoras e sou muito grato