Ir ao conteúdo
  • Cadastre-se
Eizy

C Validação - Continuando com caractere.

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×