Conditional bugging in C

0

When you run the program and type the option it does not scan the value given by the user. I do not know what may be bugging the variable choice this time. What could it be?

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

float medias[4][5];
int sair = 0;
int escolha = 0;

int main(){

    int i;
    int j;

    do{
    for (i = 0; i <4; i++){
            for (j = 0; j < 5; j++){

                    medias[i][j] = 0;

}}

    void menu(void);
    void entrada(void);
    float calculo(float nota1,float nota2);
    void varrer(void);
    void mediaturma(void);
    char aprovado(float nota);

    menu();
    printf("\n");

    if (escolha = 1){
            entrada();
            printf("\n");
            printf(" entrada de dados cadastrada com sucesso! \n");
        }
     else if (escolha = 2){
             varrer();
             printf("\n");
             printf(" medias calculadas com sucesso! \n");
        }
     else if (escolha = 3){
            mediaturma();
            printf("\n");
        }
     else if (escolha = 4){

            printf("\n");
            printf("--------------------------------------------------------------------------------");
            printf("                            RESULTADO FINAL");
            printf("\n");

            for (i=0; i < 5; i++){

                  printf(" RA: %f ' nota 1: %f' nota 2: %f' media: %f \n",
                         medias[1][i], medias[2][i], medias[3][i], medias[4][i]);
            }

            printf("\n");
            printf("--------------------------------------------------------------------------------");
        }
     else if (escolha = 5){

            printf("\n");
            printf(" Saiu com Sucesso! \n!");
            sair = 1;
        }
     else{

            printf(" Opcao Invalida!");
     }

        escolha = 0;

    }while (sair != 1);

    printf(" ");
    system("pause");
    return 0;
}

void menu(void){

    printf("\n");
    printf("                                      MENU \n");
    printf(" 1 - Entrada de dados \n");
    printf(" 2 - Calcular Medias \n");
    printf(" 3 - Calcular Media da turma \n");
    printf(" 4 - Imprimir Matriz \n");
    printf(" 5 - Sair \n");
    printf("\n");
    printf(" Escolha = ");
    scanf("%i", &escolha);
}

char aprovado(float nota){

    if (nota > 6){

        return "Aprovado";
    }
    else{

        return "Reprovado";
    }
}

void entrada(void){

    int i;
    int j;

    for (i = 0; i <4 ; i++);{
        for (j = 0; j <5 ; j++){

                if (i = 1){

                        printf(" Digite o RA do aluno %i: ",j+1);
                        scanf("%f", &medias[i][j]);

                }

                if (i = 2){

                        printf(" Digite a nota 1 do aluno %i: ",j+1);
                        scanf("%f", &medias[i][j]);

                }

                if (i = 3){

                        printf(" Digite a nota 2 do aluno %i: ",j+1);
                        scanf("%f", &medias[i][j]);

                }


    }}
}

float calculo(float nota1,float nota2){

     float calc = 0;
     calc = ((nota1 + nota2) / 2);
     return calc;
}

void varrer(void){

     int j = 0;
     for (j = 0; j < 5; j++){

            medias[4][j] = calculo(medias[2][j],medias[3][j]);
     }
}

void mediaturma(void){

  float total = 0;
  float mediat = 0;
  int i = 0;

  for (i=0; i < 5; i++){

    total = (total + medias[4][i]);
  }

  mediat = total / 5;

  printf(" A media da turma eh de %f ", mediat);
}
    
asked by anonymous 28.06.2016 / 22:35

1 answer

3

The value of your choice is always 1 because of the first condition if . For you do not make the comparison, but an assignment.

if (escolha = 1) // atribui 1 em escolha

So it always goes into this condition because choice will be different from 0 . The correct one is:

if (escolha == 1) // assim ele compara escolha com 1 sem fazer atribuição de valor.

This holds true for all other conditions you've made, all of which must be fixed.

  

Note: Ideally, you should declare methods above main , not within it.

     

Note: The approved method should be of type const char because the return is a constant text.

     

Note: Observations are not mandatory, it's just a question of semantics.

    
28.06.2016 / 23:12