Ir ao conteúdo

C Não consigo fazer o loop terminar


Ir à solução Resolvido por Felipecfk,

Posts recomendados

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
	
	int pedidos, venda=0;
	int cod, itens;
	float cr1, cr2, cr3, cr4; // CR1 = Comissao do representante
	float taxa1=0.1, taxa2=0.15, taxa3=0.20, taxa4=0.25; // Taxas de comissao
	float venda1, venda2;
	
	printf (" Registrar: Digite 1 \n");
	printf (" Cancelar o registro: Digite 0 \n");
	scanf (" %d", &venda );
	printf ("\n Representantes: Codigos de 1 a 10 ");
	
	
	while (venda!=0)
	{	
			printf ("\n Escreva o cod. do representante \n");
			scanf (" %d", &cod );
	
		if (cod==1){
		// Caso for o representante 1
				printf ("\nInforme a quantidade de itens:");
					scanf (" %d", &itens );
				printf ("\nInforme o valor total da venda:");
					scanf (" %.2f", &venda1 );	
			
		if (itens<20){ // Comissao abaixo de 20 itens;
			cr1 = venda1*taxa1;}
		if (itens>=20 || itens <=49);{ // Comissao entre 20 e 49 itens;
			cr1 = venda1*taxa2;}
		if (itens > 50 || itens <=74);{ // Comissao entre 50 e 74 itens;
			cr1 = venda1*taxa3;}
		if (itens>75);{ // Comissao acima de 75 itens;
			cr1 = venda1*taxa4;}
		printf ("Pedido Registrado!");
		pedidos++;
		}
		// Caso for o representante 2	
		if (cod==2){

					printf ("\nInforme a quantidade de itens: \n");
						scanf (" %d", &itens );
			
					printf ("\nInforme o valor total da venda: \n");
						scanf (" %.2f", &venda2 );				
				
			if (itens<20){ // Comissao abaixo de 20 itens;
				cr2 = venda2*taxa1;}
			if (itens>=20 || itens <=49){ // Comissao entre 20 e 49 itens;
				cr2 = venda2*taxa2;}
			if (itens > 50 || itens <=74){ // Comissao entre 50 e 74 itens;
				cr2 = venda2*taxa3;}
			if (itens>75){ // Comissao acima de 75 itens;
				cr2 = venda2*taxa4;}
			pedidos++;
		}		
	}
	if (venda==0)
		printf ("\nValor da comissao de cada pedido: %.2lf\n"); // Informar por pedido, quanto deu de comissao por pedido;
		printf ("Total de vendas processado: %d\n", pedidos); // Todas as vendas finalizadas e informadas pelo pedidos++;
		
		printf ("\nTotal de comissoes para cada representante\n"); // quanto o representante recebeu de todos os pedidos e representar por representante;
		printf ("\nRepresentante 1 : %.2f R$", cr1);
		printf ("\nRepresentante 2 : %.2f R$", cr2);
		printf ("Total de comissoes que a companhia pagou aos seus representantes"); // Soma de comissoes de todos os representantes;
	return 0;
}

Estou tendo um problema, quero que após realizar os if(cod==1) o programa volte para o while, mas sem repetir o mesmo caso, quero fazer um outro case if(case==2), mas o programa fica no looping de perguntar o codigo e o produto.

Postado

@AsafeBernardoOficial   seu código não está compilando , e as opções que você quer escolher precisam ficar dentro de um loop ,  que poderia ser assim  :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char* argv[]) 
{
    int pedidos{}, venda = 0;
    int cod, itens;
    // CR1 = Comissao do representante
    float cr1{}, cr2{}, cr3{}, cr4{};                            // inicializar as variaveis
    float taxa1 = 0.1, taxa2 = 0.15, taxa3 = 0.20, taxa4 = 0.25; // Taxas de comissao
    float venda1{}, venda2{};
    do
    {
        printf("\n");
        printf(" 0 - Cancelar o registro\n");
        printf(" 1 - Registrar ");
        scanf(" %d", &venda);
        printf("\n Representantes: Codigos de 1 a 10 ");
        do
        {
            printf("\n Escreva o cod. do representante\n");
            printf("zero para sair ");
            scanf("%d", &cod);
            if (cod == 0)break;
            if (cod == 1)
            {
                // Caso for o representante 1
                printf("\nInforme a quantidade de itens: ");
                scanf(" %d", &itens);
                printf("\nInforme o valor total da venda: ");
                scanf(" %.2f", &venda1);
                if (itens < 20)    // Comissao abaixo de 20 itens;
                {
                    cr1 = venda1 * taxa1;
                }
                if (itens >= 20 && itens <= 49) // Comissao entre 20 e 49 itens;
                {                               // entre é > && < maiorque and menorque
                    cr1 = venda1 * taxa2;       // || isso é ou
                }
                if (itens > 50 && itens <= 74) // Comissao entre 50 e 74 itens;
                {
                    cr1 = venda1 * taxa3; 
                }
                if (itens > 75) // Comissao acima de 75 itens;
                {
                  cr1 = venda1 * taxa4; 
                }
                printf("Pedido Registrado !\n");
                pedidos++;
            }
            // Caso for o representante 2	
            if (cod == 2)
            {
                printf("Informe a quantidade de itens: ");
                scanf(" %d", &itens);
                printf("Informe o valor total da venda: ");
                scanf(" %.2f", &venda2);
                if (itens < 20) // Comissao abaixo de 20 itens;
                {
                    cr2 = venda2 * taxa1;
                }
                if (itens >= 20 && itens <= 49) // Comissao entre 20 e 49 itens;
                {
                    cr2 = venda2 * taxa2;
                }
                if (itens > 50 && itens <= 74) // Comissao entre 50 e 74 itens;
                {
                    cr2 = venda2 * taxa3;
                }
                if (itens > 75) // Comissao acima de 75 itens;
                {
                    cr2 = venda2 * taxa4;
                }
                pedidos++;
            }
        } while (1);
    } while (venda != 0);
    printf("\nValor da comissao de cada pedido: %.2f\n", cr1); // Informar por pedido, quanto deu de comissao por pedido;
    printf("Total de vendas processado: %d\n", pedidos); // Todas as vendas finalizadas e informadas pelo pedidos++;
    printf("\nTotal de comissoes para cada representante\n"); // quanto o representante recebeu de todos os pedidos e representar por representante;
    printf("\nRepresentante 1 : %.2f R$", cr1);
    printf("\nRepresentante 2 : %.2f R$", cr2);
    printf("Total de comissoes que a companhia pagou aos seus representantes"); // Soma de comissoes de todos os representantes;
    printf("\n\n\n");
    return 0;
}

 

Postado

@devair1010 Não acho que alguém aqui se importe com isso, mas o seu código não é compatível com C por causa da inicialização de variáveis.

48 minutos atrás, devair1010 disse:

float cr1{}, cr2{}, cr3{}, cr4{};

As chaves só são validas em C++

  • Curtir 1
Postado

@kgin não sabia disso.

Estou realizando tecnólogo de ti e a matéria apresenta conteúdo com exemplos muito simples, e depois colocam uma questão como essa, que estou fazendo. Um pouco complicada e difícil de fazer.

Postado

programação não é difícil, o problema para a maioria dos brasileiros é que principalmente na linguagem C não tem muito material em português.

 

Outro problema meio que grande pra mim é que a maioria (não sei se é por preguiça) das pessoas utiliza um compilador de C++ para C que a principio resolve o problema, mas com o tempe se torna o problema.

 

Poste o enunciado para nós podermos entender melhor o algoritmo.

  • Solução
Postado
Em 07/05/2021 às 20:02, AsafeBernardoOficial disse:

Estou tendo um problema, quero que após realizar os if(cod==1) o programa volte para o while, mas sem repetir o mesmo caso, quero fazer um outro case if(case==2), mas o programa fica no looping de perguntar o codigo e o produto.

Sinceramente, talvez seja só mudar algumas coisas:

 

1- Trocar o while por if
2- Colocar printf ("\n Escreva o cod. do representante \n"); scanf (" %d", &cod );  fora(antes) desse if.
3- Depois disso colocar switch-case que você queria. Um trecho do exemplo abaixo:


if (venda!=0)
{   
    switch (cod) {  
 
            case 1 :
            if (cod==1)
                printf ("\nInforme a quantidade de itens:");
                    scanf (" %d", &itens );
                printf ("\nInforme o valor total da venda:");
                    scanf (" %.2f", &venda1 );
                     (..etc..)
                    break;
                 

              case 2:

              printf ("\nInforme a quantidade de itens: \n");
                        scanf (" %d", &itens );
              (..etc..)
              break;
}

Espero ter ajudado.

Postado
6 horas atrás, AsafeBernardoOficial disse:

@kgin não postei o enunciado pelo medo de estar entregando a questão de bandeja, como sei que no fórum ninguém faz trabalho para outros, decidi só botar o problema específico que eu estava enfrentando no código.

Eu já vi essa mesma questão varias vezes aqui no fórum, então eu acho que a chance de alguém copiar logo o seu é baixa.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...