Alguém sabe o erro?

Seguinte este código (link) compila e executa sem problemas, porém ele não faz o calculo dos ifs, nenhum deles, ja modifiquei o código de C++ para C e nada de resultados… Ao compilar ele não gera erros e ao final da execução retorna 0, ou seja, sem erros também… Alguém tem idéia do que pode ser?

Link: pastebin.com/5ZZxmWKq

Nunca mais mexi no c mas , voce tem que retorna o preconovo ao invez de zero…

Não cara, esse return 0 é retorno pro sistema operacional, significa que se retorar 0 ele chegou ao final do código, ou seja, sem erros, porque quando o C encontra um erro ele para de executar ou compilar dependendo do erro e da um retorno maluco…

Tinha esquecido desse detalhe…

Abri o coodeblock e teste coloquei preco 10.
venda mensal 600.

ele retorrnou 10.0

No caso esse seus codigo tem (10/100)
esse numero entre parentese esta divindo o que ?

Substitua as variaveis por valores em uma calculadora… ele esta pegando 10% do valor e somando ao próprio valor, ou seja, ele mesmo mais 10%

Por exemplo se eu digita dez reais…

ele tem que pega 10 reais e soma mais 10% ?

Oi, Thais. Acho que resolvi o seu problema. O link com o novo código é esse: resposta. Você notará que o problema é resolvido com uma modificação muito sutil. Após o dez, quinze e vinte e antes do operador de divisão adicionei um único ponto. Também poderia adicionar após o cem. Ademais, esse ponto pode vir acompanhado de um 0, já que nada mais é do que o separador decimal (seria a vírgula segundo nosso padrão). Você observará, também, que eu modifiquei uma parte do seu código no que se refere às condições. Na prática não há nenhuma alteração perceptível, contudo, creio que o código tenha ficado mais conciso. No que se refere a sua dúvida, não tenho mais nada a acrescentar.

Percebi que você utilizou a função setbuf. Compilei e executei o código sem ela e não constatei nenhuma diferença. Você poderia me explicar o conceito por trás dessa função?

Quando se faz uma divisão de números inteiros, o resultado sera um numero inteiro, mas nos queremos pegar o 0.1, e nao somente o “0” então precisamos fazer o chamado cast, que é transformar o tipo de um numero em outro.
((float)10/100)

@JoaoGiet o setbuf geralmente é usado pra limpar o buffer do teclado (“stdin, null” torna nulo o buffer da entrada padrão), isso é necessário nessa linguagem por que depois que você envia um valor o teclado fica com o"enter" utilizado pra submeter o valor em seu buffer. Assim a proxima requisiçao de valor pode receber esse enter vazio e pular essa entrada de valor do usuário. Geralmente da mais problemas quando se tem entradas de valores seguidas ou principalmente dentro de uma estrutura de repeticoes.

@rafaelfs, muito obrigado pela explanação, foi de grande ajuda.