Variable loses value in C

1

The code below has the expected behavior in case the values are entered correctly. But, when I am reporting, for example, in the following order: preco equal to 1 , quantidade equal to -1 , then quantidade equal to 3 , the value of the variable preco becomes 0 .

#include <stdio.h>
#include <string.h>

int main() {
    float preco = -1, totalAPagar;
    int quantidade = -1, jaPediuEntrada = 0;
    char mensagem[20];

    do {
        (jaPediuEntrada == 1) ? strcpy(mensagem, "Erro! ") : strcpy(mensagem, "");
        strcat(mensagem, "Insira um preco: ");
        printf(mensagem);
        scanf("%f", &preco);
        jaPediuEntrada = 1;
    } while (preco <= 0);

    jaPediuEntrada = 0;

    do {
        (jaPediuEntrada == 1) ? strcpy(mensagem, "Erro! ") : strcpy(mensagem, "");
        strcat(mensagem, "Insira uma quantidade: ");
        printf(mensagem);
        scanf("%d", &quantidade);
        jaPediuEntrada = 1;
    } while(quantidade <= 0);

    /*Debug*/
    printf("\nO preco e igual a %.2f.", preco);
    printf("\nA quantidade e igual a %d.\n", quantidade);

    totalAPagar = preco * quantidade;

    printf("O total a pagar e igual a %.2f.", totalAPagar);

    return(0);
}

Does anyone know why this program behaves?

    
asked by anonymous 13.03.2015 / 11:45

1 answer

4

First thing I noticed:

"Erro! Insira um preco: " needs 24 bytes ... but your mensagem only has room for 20.

    
13.03.2015 / 11:52