检查并在结构的数组(向量)中插入一个值

时间:2016-12-25 20:26:01

标签: c vector struct

所以,我正在尝试在我的结构向量中添加一个元素。我要求用户添加数据,但在添加之前,我需要检查这3个成员中的2个是否介于某些值之间。我必须执行此操作但是,当我运行程序时,被检查的成员会被“询问”两次。一旦检查它们,然后将它们添加到矢量中。我想要的是只有在他们通过验证功能时才添加它们。这是我的代码:

即: 输入:2160482 20 Nelson(这将通过验证功能但是,我的代码完成的方式,我必须为“Numero”和“notaFinal”两次这样做。)

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

#define LIMITE 31
#define MAX_ALUNOS 60
//#define limite_inferior 2150001
//define limite_superior 2169999

typedef struct
{
    int numero;
    int notaFinal;
    char nome[LIMITE];
} tEstudante;

//tEstudante ler_dados_estudante(void);
int validar_insert (int minimo, int maximo);
int ler_dados_estudante(tEstudante vAlunos[MAX_ALUNOS], int numAlunos);
void mostrar_dados_estudante(tEstudante vAlunos[MAX_ALUNOS], int numAlunos);
void alterar_dados_aluno (tEstudante vAlunos[MAX_ALUNOS], int numAlunos);
int procurar_aluno(tEstudante vAlunos[MAX_ALUNOS], int numAlunos, int numero_aluno);
int menu();

void main(void)
{
    tEstudante vAlunos[MAX_ALUNOS];

    int numAlunos;
    int option;
    // int numero;
    // int nota;
    // char nome;

    option = menu();

    switch(option)
    {
    case 1:
        printf("Inserir dados\n");
        ler_dados_estudante(vAlunos, numAlunos);
        //nome = validar_insert();
        break;

    case 2:
        printf("Mostrar dados dos estudantes");
        break;

    case 3:
        printf("Alterar notas finais dos estudantes");
        break;

    case 4:
        printf("Estatisticas das avaliacoes");
        break;

    case 5:
        printf("Gravar dados em ficheiro");
        break;

    case 6:
        printf("Ler dados do ficheiro");
        break;

    case 0:
        printf("Sair");
        break;
    }
}

int menu ()
{
    int opcao;

    do
    {
        printf("1 - Inserir dados do estudante");
        printf("\n2 - Mostrar dados dos destudantes");
        printf("\n3 - Alterar notas finais do estudantes");
        printf("\n4 - Estatisticas das avaliacoes");
        printf("\n5 - Gravar dados em ficheiro");
        printf("\n6 - Ler dados de ficheiro");
        printf("\n0 - Fim\n");

        printf("Escolha uma opcao:\n");
        scanf("%i", &opcao);

        if (opcao != 1 && opcao != 2 && opcao != 3 && opcao != 4 && opcao != 5 && opcao != 6 && opcao != 0)
            printf("Opcao invalida !\n\n");
    }
    while (opcao != 1 && opcao != 2 && opcao != 3 && opcao != 4 && opcao != 5 && opcao != 6 && opcao != 0);

    return opcao;
}

int validar_insert (int minimo, int maximo)
{
    int valor;

    do
    {
        scanf("%i", &valor);
        if (valor < minimo || valor > maximo)
        {
            printf("Valor fora do intervalo aceitavel");
            printf("\nInserir dados novamente: \n");
        }

        else
            return valor;
    }
    while (valor < minimo || valor > maximo);
}


int ler_dados_estudante(tEstudante vAlunos[MAX_ALUNOS], int numAlunos)
{

    int numero;
    int nota;
    char nome;

    printf("Insira o numero do aluno: \n");
    numero = validar_insert (2150001, 2169999);
    vAlunos[1].numero = numero;

    printf("Insira a nota final do aluno: \n");
    nota = validar_insert (0, 20);
    vAlunos[1].notaFinal = nota;

    printf("Insira o nome do aluno: \n");
    scanf(" %s", &vAlunos[1].nome);
    //scanf("%i %i %s", &vAlunos[1].numero, &vAlunos[1].notaFinal, &vAlunos[1].nome);

    printf("%i %i %s", vAlunos[1].numero, vAlunos[1].notaFinal, vAlunos[1].nome);

}

0 个答案:

没有答案