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:  
Zweiss

while, if, switch tudo no mesmo programa

Recommended Posts

Estou num curso de informática e agora o professor de programação começou a dar matéria nova que envolve o switch case, if, while tudo no mesmo programa de linguagem C.

 

O problema está que não acho nenhuma informação em relação a isso.

O exercício é algo assim:

#include <stdio.h>
main (){

    setvbuf (stdout,NULL,_IONBF,0);

    int num1, mum2;

    while (op!=0){
       inserir aqui um menu, que se vai repetir até inserir o número 0
        printf ("Insira uma opção\n");
        scanf ("%d", &op);
        if(op!=0){
            printf ("Insira o primeiro número\n");
            scanf ("%f", &num1);
            printf ("Insira o segundo número\n");
            scanf ("%f", &num2);
        }
        switch (op){
        case 1 : instruções
            break;

        case 2 :
           instruções
            break;

        case 0 :
            printf ("Sair");
            break;

        default:
            printf("\nInválido");
        }
    }
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aconselho sempre refazer o código, para atingir uma maior qualidade e organização do código, dando uma maior performance e descartando as futilidades que venham a confundir posteriormente, enfim, seu código ta apenas com alguns errinhos, mas uma ajustada e fica show. Segue: 

#include <stdio.h>
int main (){
    setvbuf (stdout,NULL,_IONBF,0);
    int num1 = 0, num2 = 0, op = 1; //Adicionei op, declarei as variaveis
    
    while (op!=0){
    	//Introdução
        printf ("Insira uma opção\n");
        scanf ("%d", &op);
        
        //Esse menu vai mostrar, contanto que op não seja 0
        if(op!=0){
            printf ("Insira o primeiro número\n");
            scanf ("%f", &num1);//Não sei qual sua necessidade de usar %f com inteiro, deixei assim
            printf ("Insira o segundo número\n");
            scanf ("%f", &num2);
            
             //Não é necessário identificar o op 3 vezes
             //só com o if, ja podemos criar um novo conteudo,
             //o while vai decidir se sai ou não
             //A NÃO SER QUE O OP MUDE DEPOIS DA INTRODUÇÃO
       		 switch (op){
 		     	 case 1 : 
   	             //instruções 1
             	 break;
        		 case 2 :
  	    	     //instruções 2
           	     break;
        		 default:
   				 printf("\nInválido");
   				 break;
     	 	 }
        }
    }
	printf("Saindo!");
	return 0;
}

 

Editado por 1freakday

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 16 minutos atrás, 1freakday disse:

    Aconselho sempre refazer o código, para atingir uma maior qualidade e organização do código, dando uma maior performance e descartando as futilidades que venham a confundir posteriormente, enfim, seu código ta apenas com alguns errinhos, mas uma ajustada e fica show. Segue: 

    
    #include <stdio.h>
    int main (){
        setvbuf (stdout,NULL,_IONBF,0);
        int num1 = 0, num2 = 0, op = 1; //Adicionei op, declarei as variaveis
        
        while (op!=0){
        	//Introdução
            printf ("Insira uma opção\n");
            scanf ("%d", &op);
            
            //Esse menu vai mostrar, contanto que op não seja 0
            if(op!=0){
                printf ("Insira o primeiro número\n");
                scanf ("%f", &num1);//Não sei qual sua necessidade de usar %f com inteiro, deixei assim
                printf ("Insira o segundo número\n");
                scanf ("%f", &num2);
                
                 //Não é necessário identificar o op 3 vezes
                 //só com o if, ja podemos criar um novo conteudo,
                 //o while vai decidir se sai ou não
                 //A NÃO SER QUE O OP MUDE DEPOIS DA INTRODUÇÃO
           		 switch (op){
     		     	 case 1 : 
       	             //instruções 1
                 	 break;
            		 case 2 :
      	    	     //instruções 2
               	     break;
            		 default:
       				 printf("\nInválido");
       				 break;
         	 	 }
            }
        }
    	printf("Saindo!");
    	return 0;
    }

     

    Esse código não é preciso corrigir, eu tirei os dados do menu de propósito, o problema consistia em criar uma calculadora com operadores (+ - / *) e como se ia usar a divisão o prof recomendou usar float em vez de int .

    Eu apenas quero perceber mais sobre usar if, while, switch no mesmo programa. Usar o while, if e swtich em programas separados eu sei fazer mas agora combinar tudo num único programa não acho informações nenhumas nem mesmo no livro de programação do Luís Damas.

     

    Neste momento tenho em exercício que pede o seguinte:

    Pedir idades ao utilizador até este inserir o numero -99:

    calcular o total de pessoas com mais de 21 anos;

    total de pessoas com mais de 50 anos.

     

    Passei a tarde inteira de volta do problema e a única coisa que fui capaz de fazer foi isto (o que não está correcto):

    #include <stdio.h>
    main (){
        setvbuf (stdout,NULL,_IONBF,0);

        int op=1, idade=0, idade_21=0, idade_50=0;

        while (op!=99){
            printf("1 - Idade supeior a 21\n");
            printf("2 - Idade supeior a 50\n");
            printf("99 - Terminar\n");
            printf ("Insira uma opção\n");
            scanf ("%d", &op);
            if(op!=99){
                printf ("Insira uma idade supeior a 21\n");
                scanf ("%d", &idade);
                printf ("Insira uma idade supeior a 50\n");
                scanf ("%d", &idade);
            }
            switch (op){
            case 1 :
                if (idade>21){
                    idade_21 = idade_21 + 1;
                }
                break;
            case 2 :
                if (idade>50){
                    idade_50 = idade_50 + 1;
                }

                break;

            case 99 :
                printf ("Sair");
                break;

            default:
                printf("\nInválido");
            }
            printf ("Idade maior que 21: %d\n", idade_21);
            printf ("Idade maior que 50: %d\n", idade_50);
        }
    }

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Bom dia, desculpe a maneira que joguei o código, acredito que interpretei que só queria o código corrigido, e não, coteudo sobre 'laços'. Portanto, segue um documento bem explicado sobre as estruturas de repetição, envolvendo varios exemplos: http://olimpiada.ic.unicamp.br/extras/cursoC/Cap06-RepeticaoControle-texto.pdf

    é um documento de faculdade, então vale a pena dar uma olhada.

    Dependendo da necessidade, os loops sempre poderão ser usados dentro de uma área de código, a partir de { <sentença> }, independente se foi usado anteriormente if/switch(case)/while/do...while/ etc.

     

    Em relação ao 2º código, vou dar apenas um exemplo, mas você pode melhora-lo, de acordo com seu aprendizado, segue:

    //Usand if...while...switch
    #include <stdio.h>
    main (){
    	setvbuf (stdout,NULL,_IONBF,0);
    	int op=0, idade = 0, idade_21=0, idade_50=0;
    	
    	//Seguindo a questão, é para pedir apenas idade.
    	while (op!=99){
    		//Entrada de dados
    		printf ("\n99: Terminar\n");
    		printf ("Insira uma idade:");
    		scanf ("%d", &idade);
    		
    		//Verifica a idade
    		if (idade>21) {
    			op = 21;
    		}
    		if (idade>50) {
    			op = 50;
    		}
    		if (idade==99){
    			op = 99;
    		}
    		
    		//Incrementa de acordo com a idade 
    		//P.S: Se maior que 21 e 50, vale 50
    		switch (op){
    			//Maior que 21 - incrementar
    			case 21:
    			idade_21++;
    			break;
    
    			//Maior que 50 - incrementar
    			case 50:
    			idade_50++;
    			break;
    		
    			//Sair
    			case 99:
    			printf ("Sair\n");
    			break;
    		
    			//Idade inferior a 21
    			default:
    			printf("Invalido\n");
    		}
    	}
    	//Mostrar total na saida do programa
    	printf ("Idade maior que 21: %d\n", idade_21);
    	printf ("Idade maior que 50: %d\n", idade_50);
    }

    P.S: Não usei else if, pois um numero pode ser maior que 21 e 50, e preciso filtrar os dois.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Assim não aparece o menu nem tão pouco o resultado da entrada de idades.

    Teria de aparecer isto quando se corre o programa:

    1 - Idades
    99 - Terminar
    Insira uma opção
    1
    Insira uma idade
    22
    Idade maior que 21: 1
    Idade maior que 50: 0

     

    Segundo o professor quem tiver mais de 21 também têm 50.

    O resultado seria como aparece neste vídeo:

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Eu não entendi se era pra fazer igual o video, ou igual a sua citação, pois no video não é usado switch, enfim, eu fiz um, de acordo com a sua ultima lógica:

    Citação

    Teria de aparecer isto quando se corre o programa:

    1 - Idades
    99 - Terminar
    Insira uma opção
    1
    Insira uma idade
    22
    Idade maior que 21: 1
    Idade maior que 50: 0

    Segue:

    //Usand if...while...switch
    #include <stdio.h>
    
    int main (){
        int op = 0, idade = 0, idade_21=0, idade_50=0;
        
        while (op!=99){
        	//Menu
            printf ("1 - Idades\n");
            printf ("99 - Terminar\n");
            printf ("Insira uma opcao: ");
            scanf ("%d", &op);
            
            //Entrada de dados -  se escolheu 1
            if(op == 1){
    			printf("\nInsira uma idade: ");
        	    scanf ("%d", &idade);
    		}
    		
    		//Verificar idade
    		switch (op){
    			//se Maior que 21 ou Maior que 50 - incrementar
            	case 1:
    				if(idade > 21 && idade <= 50)
    	    			idade_21++;//Mesma coisa que idade_21 = idade_21+1; ou idade_21+=1;
    				if(idade > 50)
    	    			idade_50++;
      			break;
    		
    		   	//Sair
          	  	case 99:
       			printf ("\nSair\n");
      			break;
    		
    		   	//Idade inferior a 21
            	default:
    			printf("\nInvalido\n");
            }
        //Mostrar total a cada entrada de dados
        printf ("\nIdade maior que 21: %d\n", idade_21);
        printf ("Idade maior que 50: %d\n", idade_50);
        printf ("-------------------------\n\n");
        }
    }

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Só há mesmo o problema de não incrementar. Tipo quem tem 50 irá ter 21 e o oposto.

    Se insiro 22 o resultado será:

    Idade >21 = 1

    Idade > 50 = 0

    Volto a inserir idade, por exemplo 55.

    O resultado seria;

    Idade >21 = 2

    Idade > 50 = 1

     

    Ao rodar o programa várias vezes ele teria de incrementar as idades em 21 e 50.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Entendi, no caso você só precisa tirar idade <= 50  de  if(idade > 21 && idade <= 50) 

    Ficando:

    switch (op){
       //se Maior que 21 e/ou Maior que 50 - incrementar
       case 1:
       if(idade > 21) 
         idade_21++;
       if(idade > 50)
         idade_50++;
       break;
       ...

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 12 minutos atrás, 1freakday disse:

    Entendi, no caso você só precisa tirar idade <= 50  de  if(idade > 21 && idade <= 50) 

    Ficando:

    
    switch (op){
       //se Maior que 21 e/ou Maior que 50 - incrementar
       case 1:
       if(idade > 21) 
         idade_21++;
       if(idade > 50)
         idade_50++;
       break;
       ...

     

    Eu fiz isso mas também não está a dar, corri o programa 4 vezes, na 1ª vez inseri 26, na 2ª inseri 30, na 3ª inseri 40 e na 4ª inseri 55 e o resultado deu:

    Insira uma idade: 55

    Idade maior que 21: 4
    Idade maior que 50: 1
    -------------------------

    1 - Idades
    99 - Terminar
    Insira uma opcao

     

    Ele incrementa no 21 mas não no 50.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    //Usand if...while...switch
    #include <stdio.h>
    
    int main (){
        int op = 0, idade = 0, idade_21=0, idade_50=0;
        
        while (op!=99){
        	//Menu
            printf ("1 - Idades\n");
            printf ("99 - Terminar\n");
            printf ("Insira uma opcao: ");
            scanf ("%d", &op);
            
            //Entrada de dados -  se escolheu 1
            if(op == 1){
    			printf("\nInsira uma idade: ");
        	    scanf ("%d", &idade);
    		}
    		
    		//Verificar idade
    		switch (op){
            	case 1:
    				if(idade >= 21)
    	    			idade_21++;
    				if(idade >= 50)//nao usar else...if
    	    			idade_50++;
      			break;
    		
    		   	//Sair
          	  	case 99:
       			printf ("\nSair\n");
      			break;
    		
    		   	//Idade inferior a 21
            	default:
    			printf("\nInvalido\n");
            }
        //Mostrar total a cada entrada de dados
        printf ("\nIdade maior que 21: %d\n", idade_21);
        printf ("Idade maior que 50: %d\n", idade_50);
        printf ("-------------------------\n\n");
        }
    }

    Tente agora...

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • O 50 continua a não incrementar com a idade do 21.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Pode mostrar uma imagem da tela, pois aqui esta normal, ali nas condições de case 1, é bom deixar apenas > do que >=, pois só precisamos incrementar os maiores, e não 21 e 50. Enfim, com 50 aqui ta funcionando normal, no mesmo código que mandei, segue imagem em anexo.

    Sem título.png

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Fica assim.

    Capturar.thumb.JPG.db0fa079979cada6e83b3c14392e555d.JPG

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Eu acho que você está complicando um pouco o código, algo que não é bem visto na lógica, pois antes você disse que a questão era:

    Citação

    Pedir idades ao utilizador até este inserir o numero -99:

    calcular o total de pessoas com mais de 21 anos;

    total de pessoas com mais de 50 anos.

     

    Recapitulando...

    No básico, o código pede vários dados, as idades, e a cada dado filtramos quem tem maior de 21 e quem tem maior de 50.

    Sendo que quem tem maior de 21 pode ou não ter maior 50.

    No caso podemos ter:

    1- Idade inferior a 21 - não incrementa

    2- Idade superior/igual a 21 e menor que 50 - incrementa apenas 21

    3- Idade superior/igual a 50 - porém também é superior a 21 - incrementa 21 e 50.

     

    Na 2, não é preciso incrementar 50, pois é inferior a 50.

     

    essa é a unica lógica segundo suas informações da questão, e segundo a imagem que você mandou, o programa esta certo. Ainda mais que foi possível usar if / while / switch.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Eu quando tiver aulas de programação ponho aqui o código como o professor quer que o fazemos.

    • 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

    ×