Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pulse

Erro código c

Recommended Posts

19) Um empresário deseja controlar o seu caixa diariamente. Para isso, deve-se elaborar um algoritmo que:
a) Leia um valor que estabelece o saldo inicial do caixa;
Página: 42
B) Leia as informações necessárias ao controle de caixa, representando cada uma das movimentações do caixa como: valor, tipo de movimentação (E = entrada, S = saída), forma de pagamento (C = cheque, D = dinheiro).
c) Determine e escreva:
c.1) O saldo inicial informado;
c.2) A soma dos valores de entrada;
c.3) A soma dos valores de saída;
c.4) A soma dos valores de entrada com cheques;
c.5) O saldo atual, informando se negativo ou positivo.

 

* Utilize como flag o 0 (zero) para o valor digitado.
#include <stdio.h>

int main ()
{
    float valor, saldoinicial, somaentrada=0, somasaida=0, somaentradacheque=0, saldoatual;
    char movimentacao, pagamento;

	printf("Digite o saldo inicial");
	scanf("%f", &saldoinicial);

	saldoatual = saldoinicial;

    do
    {
        do
        {
            printf("Digite o valor da operacao");
            scanf("%f", &valor);
        }while(valor<0);

        if (valor>0)
        {


            printf("Digite o tipo de movimentacao");
            scanf("%c%*c", &movimentacao);

            printf("Digite a forma de pagamento");
            scanf("%c%*c", &pagamento);

            if(movimentacao == 'e')
            {
                saldoatual += valor;
                somaentrada += valor;

                if(pagamento == 'c')
                {
                    somaentradacheque+=valor;
                }
            }

            else if (movimentacao == 's')
            {
                somasaida += valor;
                saldoatual -= valor;
            }
        }

    }while(valor!=0);

    printf("Saldo inicial: %f. \n Saldo atual: %f. \n Soma valores entrada: %f.\nSoma valores saida: %f.\nSoma entrada com cheque: %f.", saldoinicial, saldoatual, somaentrada, somasaida, somaentradacheque );

    return 0;
}

O código não tá entrando nos ifs... já vi novamente várias vezes e não acho erros. Ao final da execução sempre mostra o saldo inicial e o saldo atual com o valor que foi atribuido a ele primeiramente (saldo inicial) e o resto das informações também continua com o valor atribuido primeiramente (0)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está entrando porque o valor de ambas as variáveis é \n:

 

 

Breakpoint 2, main () at caixa.c:31

31 if(movimentacao == 'e')
1: valor = 1
(gdb) display movimentacao
2: movimentacao = 10 '\n'
(gdb) display pagamento

3: pagamento = 10 '\n

#include <stdio.h>
#include <ctype.h>

void ler_saldo_inicial(float * saldo_inicial) {
    printf("Digite o saldo inicial: ");
    scanf("%f", saldo_inicial);
}

void ler_tipo_operacao(char * tipo_op) {
    do {
        printf("Digite o tipo de movimentacao: ");
        scanf("%c", tipo_op);
        (*tipo_op) = tolower((*tipo_op));
        if ((*tipo_op) != 'e' && (*tipo_op) != 's') {
            printf("Operação inválida. Informe s ou e.\n");
        }
    } while ((*tipo_op) != 'e' && (*tipo_op) != 's');
}

void ler_valor_operacao(float * valor_op) {
    printf("Informe o valor da operação: ");
    scanf("%f%*c", valor_op);
}

void ler_forma_pagamento(char * forma_pagto) {
    do {
        printf("Digite a forma de pagamento: ");
        scanf("%*c%c", forma_pagto);
        (*forma_pagto) = tolower((*forma_pagto));
        if ((*forma_pagto) != 'c' && (*forma_pagto) != 'd') {
            printf("Forma de pagamento inválida. Informe c ou d.\n");
        }
    } while ((*forma_pagto) != 'c' && (*forma_pagto) != 'd');   
}

int main (void) {
    float saldo_inicial, valor_op, saldo_atual;
    char tipo_op, forma_pagto;
    float soma_entrada = 0.0F, soma_saida = 0.0F;
    float soma_entrada_cheques = 0.0F;

    ler_saldo_inicial(&saldo_inicial);
    saldo_atual = saldo_inicial;

    while(1) {

        ler_valor_operacao(&valor_op);

        if (!valor_op) break;

        ler_tipo_operacao(&tipo_op);
        

        if (tipo_op == 'e') {
            soma_entrada+=valor_op;
            ler_forma_pagamento(&forma_pagto);

            if (forma_pagto == 'c') {
                soma_entrada_cheques+=valor_op;
            }
        } else if (tipo_op == 's') {
            soma_saida+=valor_op;
            valor_op=(-1)*valor_op;
        }
        saldo_atual+=valor_op;

    }

    printf("Saldo inicial informado: %.2f\n", saldo_inicial);
    printf("Total de valores de entrada: %.2f\n", soma_entrada);
    printf("Total de valores de entrada via cheques: %.2f\n", soma_entrada_cheques);
    printf("Total de valores de saída: %.2f\n", soma_saida);
    printf("Saldo atual: %+.2f\n", saldo_atual);
    return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.