Floating point exception (core dumped)

3

This code is giving the error Floating point exception (core dumped) , it's just a piece of programming in c, but this error occurs after printf("\nO Total de apostas foram:%d\n", taposta); in main , so the error is inside the function that I named just right which I do not think is my mistake.

code:

#include<stdio.h>

int tacerto[100];
struct premio {
    int valorquina;
    int valorquadra;
    int valorterno;
};

int apostadores( int apostador[100][5]){

    int i, x, a=1, taposta=0;
    for (i=0;i<100;i++){
        for (x=0;x<5;x++){
        apostador[i][x]=0;
        }
    }
    i=0;
    while (i<100 && a!=0){
        i++;
        printf("\tDigite os numeros da sua aposta:\n");
            for (x=0;x<5;x++){
                scanf("%d", &apostador[i][x]);
            }
        taposta++;
        printf("Gostaria de continuar? Sim-1 / Não-0\n");
        scanf("%d", &a);
    }
    return taposta;
}

void acerto(int sorteio[5], int apostadores[100][5], int taposta){

    int i, x, k, z=0;

        for (i=0;i<taposta;i++){
                for (x=0;x<5;x++){
                    for (k=0;k<5;k++){
                        if (apostadores[i][x]==sorteio[k])
                        z++;
                        }
                }
            tacerto[i]=z;
            z=0;
        }
    }

struct premio valorpremio(int apostadores[100])
{
    struct premio dinheiro;
    int i, z=0.0, n=0.0, o=0.0;
    for (i=0;i<100;i++){
            if (apostadores[i]==5)
            z++;
            if (apostadores[i]==4)
            n++;
            if (apostadores[i]==3)
            o++;
        }
    dinheiro.valorquina=150600/z;
    dinheiro.valorquadra=30000/n;
    dinheiro.valorterno=20000/o;

    return dinheiro;
}

void armazenamento(int valorporapostador[100], int tacerto[100],struct premio valor)
{
    int i;

    for (i=0;i<100;i++){
        if (tacerto[i]==5)
        valorporapostador[i]=valor.valorquina;
        if (tacerto[i]==4)
        valorporapostador[i]=valor.valorquadra;
        if (tacerto[i]==3)
        valorporapostador[i]=valor.valorterno;
        }
}

void indices(int tacerto[100]){
    int i;

    printf("INDICE DAS PESSOAS QUE GANHARAM A QUINA:");
    for (i=0;i<100;i++){
            if (tacerto[i]==5)
            printf("\n %d \n", i);
    }
}

void consulta(int valorapostador[100]){
    int a;

    printf("\nDigite o seu indice:\n");
    scanf("%d", &a);

    printf("\n%d\n", valorapostador[a]);
}

int main(){
    int apostador[100][5], sorteio[5], taposta, a, valorporapostador[100], h;
    struct premio valordopremio;

    taposta = apostadores(apostador);
    printf("\nO Total de apostas foram:%d\n", taposta);

    sorteio[0]=4;
    sorteio[1]=10;
    sorteio[2]=20;
    sorteio[3]=33;
    sorteio[4]=37;


    acerto(sorteio, apostador, taposta);
    for (h=1;h<(taposta=1);h++){
        printf("apostador %d: %d ", h, tacerto[h]);
    }
    valordopremio = valorpremio(tacerto);
    printf("VALOR DOS PREMIOS:\nQUINA-%d\nQUADRA-%d\nTERNO-%d\n", valordopremio.valorquina, valordopremio.valorquadra, valordopremio.valorterno);

    armazenamento(valorporapostador, tacerto, valordopremio);

    indices(tacerto);

    printf("Deseja consultar o premio?\n Sim-1 / Nao-0");
    scanf("%d", &a);
    if (a==1){
        consulta(valorporapostador);
    }
return 0;
}
    
asked by anonymous 13.12.2014 / 17:04

1 answer

3
dinheiro.valorquina = 150600 / z;
dinheiro.valorquadra = 30000 / n;
dinheiro.valorterno = 20000 / o;

If z or n or o is zero at the time of this operation, the program stops with "Floating Point exception"

Try it like this:

if (z) dinheiro.valorquina = 150600 / z; else dinheiro.valorquina = -1;
if (n) dinheiro.valorquadra = 30000 / n; else dinheiro.valorquadra = -1;
if (o) dinheiro.valorterno = 20000 / o; else dinheiro.valorterno = -1;
    
13.12.2014 / 18:40