Ir ao conteúdo

Posts recomendados

Postado

Galera por favor é o seguinte, nesse exercício proposto tive apenas um problema que no caso é a continuação do programa na leitura do código do pais (CP) e preço(P) após eu colocar letra ele entra em um loop infinito! Deem uma força ai pro novato.

 

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

// P = Preço  -- CP = Código país --  S = Seguro --  IM = Imposto  -- VT = Valor transporte  -- i = contator.
// CPE = Carga perigosa  -- VIA = Meio de transporte.

int main(){
	setlocale(LC_ALL,"Portuguese");
	
	int P,CP,S,IM,VT,i;
	char CPE = 'C',VIA = 'P';
	P = CP = S = IM = VT = 0;
	for(i=1;i<=5;i++){
		printf("Digite o preço da mercadoria %d: ",i);
		scanf("%d",&P);
		while(P < 1){
			printf("Digite novamente!\n");
			printf("Preço da mercadoria %d: ",i);
			scanf("%d",&P);
		}
		if(P <= 100){
			IM = P*0.05;
		}
		else{
			IM = P*0.1;
		}
		fflush(stdin);
		printf("Digite meio de transporte:\nA - Áereo \nF - Fluvial \nT - Terreste\n VIA: ");
		VIA = getche();
		getche();
		printf("\n\n");
		while(VIA != 'T' && VIA != 't' && VIA != 'F' && VIA !='f' && VIA != 'A' && VIA !='a'){
			printf("Via incorreta!\n");
			printf("Digite meio de transporte: \nA - Áereo \nF - Fluvial \nT - Terreste\n VIA: ");
			VIA = getche();	
			getche();
			printf("\n\n");
		}
		printf("Digite origem do transporte - \n1 - EUA \n2 - México \n3 - outros\n Código: ");
		scanf("%d",&CP);
		while(CP < 1 || CP > 3){
			printf("Código errado!\n");
			printf("Digite o código novamente: ");
			scanf("%d",&CP);
		}
		if(CP == 2 || VIA == 'A' || VIA =='a'){
			S = P/2;
		}
		else{
			S = 0;
		}
		printf("Carga é perigosa? S/N: ");
		fflush(stdin);
		CPE = getche();
		getche();
		printf("\n\n");
		while(CPE != 'S' && CPE !='s' && CPE != 'N' && CPE != 'n'){
			printf("Digitação inválida!\n");
			printf("Carga é perigosa? S/N: ");
			CPE = getche();
			getche();
			printf("\n\n");			
		}
		if(CPE == 'S' || CPE == 's'){
			switch(CP){
				case 1:
					VT = 50;
					break;
				case 2:
					VT = 35;
					break;
				default:
					VT = 24;
					break;
			}
		}
		else
			switch(CP){
				case 1:
					VT = 12;
					break;
				case 2:
					VT = 35;
					break;
				default:
					VT = 60;
					break;
			}
			printf("Detalhes produto %d\n\n",i);
			printf("Origem: %d\n",CP);
			printf("Carga perigosa: %c\n",CPE);
			printf("Tipo de envio: %c\n\n",VIA);
			printf("Valor do produto original: ...............%d\n",P);
			printf("Imposto sobre o produto:..................%d\n",IM);
			printf("Seguro do produto.........................%d\n",S);
			printf("Valor do transporte.......................%d\n",VT);
			P = P+IM+S+VT;
			printf("Total.....................................%d\n\n",P);
			
	}
	system("pause");
	return 0;
}

Se puder detalhar  o motivo agradeço!

  • Curtir 1
Postado

@Eizy    para que não se digite letra ao invés de número,no seu caso,  você pode usar o comando atoi , então seu código ficaria assim :

char CPE = 'C',VIA = 'P',po[1];
P = CP = S = IM = VT = 0;
for(i=1;i<=5;i++){
    do{
        printf("Digite o preço da mercadoria %d: ",i);
        /*scanf("%d",&P);*/
        fflush(stdin);
        scanf("%c",&po);
        P = atoi(po);
        if(P<1)
            printf("So Pode Ser Numero...   Digite novamente !\n");
    }while(P < 1);
    if(P <= 100){
    IM = P*0.05;

 

  • Curtir 1
Postado

Obrigado pela ajuda pessoal agora consegui entender, não sabia sobre o método atoi... Mas tenho só mais uma dúvida no caso que coloquei como string ele se limita apenas a um valor de 1 milhão, existe a possibilidade de ultrapassar ?

Ficou assim o código com 100% das validações certinha... Falta apenas saber se posso colocar 1bilhão ou algo em torno.

 

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

// P = Preço  -- CP = Código país --  S = Seguro --  IM = Imposto  -- VT = Valor transporte  -- i = contator.
// CPE = Carga perigosa  -- VIA = Meio de transporte.

int main(){
	setlocale(LC_ALL,"Portuguese");
	
	int P,CP,S,IM,VT,i;
	char CPE = 'C',VIA = 'P';
	P = CP = S = IM = VT = 0;
	for(i=1;i<=5;i++){
		printf("Digite o preço da mercadoria %d: ",i);
		scanf("%d",&P);
		while(P < 1){
			printf("Digite novamente!\n");
			printf("Preço da mercadoria %d: ",i);
			scanf("%d",&P);
		}
		if(P <= 100){
			IM = P*0.05;
		}
		else{
			IM = P*0.1;
		}
		fflush(stdin);
		printf("Digite meio de transporte:\nA - Áereo \nF - Fluvial \nT - Terreste\n VIA: ");
		VIA = getche();
		getche();
		printf("\n\n");
		while(VIA != 'T' && VIA != 't' && VIA != 'F' && VIA !='f' && VIA != 'A' && VIA !='a'){
			printf("Via incorreta!\n");
			printf("Digite meio de transporte: \nA - Áereo \nF - Fluvial \nT - Terreste\n VIA: ");
			VIA = getche();	
			getche();
			printf("\n\n");
		}
		printf("Digite origem do transporte - \n1 - EUA \n2 - México \n3 - outros\n Código: ");
		scanf("%d",&CP);
		while(CP < 1 || CP > 3){
			printf("Código errado!\n");
			printf("Digite o código novamente: ");
			scanf("%d",&CP);
		}
		if(CP == 2 || VIA == 'A' || VIA =='a'){
			S = P/2;
		}
		else{
			S = 0;
		}
		printf("Carga é perigosa? S/N: ");
		fflush(stdin);
		CPE = getche();
		getche();
		printf("\n\n");
		while(CPE != 'S' && CPE !='s' && CPE != 'N' && CPE != 'n'){
			printf("Digitação inválida!\n");
			printf("Carga é perigosa? S/N: ");
			CPE = getche();
			getche();
			printf("\n\n");			
		}
		if(CPE == 'S' || CPE == 's'){
			switch(CP){
				case 1:
					VT = 50;
					break;
				case 2:
					VT = 35;
					break;
				default:
					VT = 24;
					break;
			}
		}
		else
			switch(CP){
				case 1:
					VT = 12;
					break;
				case 2:
					VT = 35;
					break;
				default:
					VT = 60;
					break;
			}
			printf("Detalhes produto %d\n\n",i);
			printf("Origem: %d\n",CP);
			printf("Carga perigosa: %c\n",CPE);
			printf("Tipo de envio: %c\n\n",VIA);
			printf("Valor do produto original: ...............%d\n",P);
			printf("Imposto sobre o produto:..................%d\n",IM);
			printf("Seguro do produto.........................%d\n",S);
			printf("Valor do transporte.......................%d\n",VT);
			P = P+IM+S+VT;
			printf("Total.....................................%d\n\n",P);
			
	}
	system("pause");
	return 0;
}

 

 

 

  • Curtir 1

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!