Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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;

 

Editado por devair1010
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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






    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

    ×