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:  
Alexandre Caribé

C++ Há alguma forma de fazer o default repetir o switch?

Recommended Posts

Galera eu estou com um problema, eu preciso fazer uma votação e fiz tudo em switch case, ela está correta porém quando voto em um número que não seja dos candidatos ele para o switch e continua o código que está abaixo dele. Preciso fazer o default repetir o switch, pois ao votar um número que não é de nenhum candidato ele continua o código que está fora do switch. Olhem como está o código:

 while(v!=0)
    {
        printf("\n\nDeputado Estadual:\n 51-Ana Rita Pacheco\n 34-Ana Guilherme\n 11-Adalberto Campos\n 10-Voto Nulo\n 15-Voto Branco");
        printf("\nDigite o número correspondente ao seu voto e aperte ENTER: ");
        scanf("%d",&v);
        switch(v){
            case 0:
                printf("Votação encerrada!");
                break;
            case 51:
                depEstAnaR=depEstAnaR+1;
                Mulher=Mulher+1;
                printf("Ana Rita Pacheco. Voto registrado!");
                break;
            case 34:
                depEstAnaG=depEstAnaG+1;
                Mulher=Mulher+1;
                printf("Ana Guilherme. Voto registrado!");
                break;
            case 11:
                depEstAdal=depEstAdal+1;
                Homem=Homem+1;
                printf("Adalberto Campos. Voto registrado!");
                break;
            case 10:
                vn=vn+1;
                printf("Voto Nulo registrado!");
                break;
            case 15:
                vb=vb+1;
                printf("Voto Branco registrado!");
            default:
                printf("OPCAO INVALIDA. Digite algo válido!");}

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Alexandre Caribé     não, o default não faz  isso ,  então você pode usar o comando do / while  assim :

do{
    printf("Digite o número correspondente ao seu voto e aperte ENTER: ");
    scanf("%d",&v);
    switch(v)
      .
      .
    códigos
      .
      .
}while(v!=0 && v!=51 && v!=34 && v!=11 ?&& v!=10 && v!=15);

 

Editado por devair1010
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010 A menos que..... coloque um continue talvez? Não provei, mas acho que daria certo >_<

  • Obrigado 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente continue não funciona. Porém goto funciona.

#include <stdio.h>
int main( void ){
	int i = 0;
	L0: switch( i ){
		case 10:
			return 0;
		default:
			printf(" %d", ++i); 
        		goto L0;}
	return 0;}

 

Editado por AnsiC
  • Curtir 2
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi, o código parece estar correto como está, se digitar uma opção inválida ele entra no default e exibe a mensagem e depois repete o o ciclo while.

 

A única coisa que vi que estava faltando era um "break" no fim do case 15 (voto em branco), e eu adicionei isso. (Se quiser também pode por um break no default mas não é necessário.)

 

    while(v!=0){
        printf("\n\nDeputado Estadual:\n 51-Ana Rita Pacheco\n 34-Ana Guilherme\n 11-Adalberto Campos\n 10-Voto Nulo\n 15-Voto Branco");
        printf("\nDigite o número correspondente ao seu voto e aperte ENTER: ");
        scanf("%d",&v);
        switch(v){
            case 0:
                printf("Votação encerrada!");
                break;
            case 51:
                depEstAnaR=depEstAnaR+1;
                Mulher=Mulher+1;
                printf("Ana Rita Pacheco. Voto registrado!");
                break;
            case 34:
                depEstAnaG=depEstAnaG+1;
                Mulher=Mulher+1;
                printf("Ana Guilherme. Voto registrado!");
                break;
            case 11:
                depEstAdal=depEstAdal+1;
                Homem=Homem+1;
                printf("Adalberto Campos. Voto registrado!");
                break;
            case 10:
                vn=vn+1;
                printf("Voto Nulo registrado!");
                break;
            case 15:
                vb=vb+1;
                printf("Voto Branco registrado!");
                break;
            default:
                printf("OPCAO INVALIDA. Digite algo válido!");
        }
    }
  • Curtir 1
  • Obrigado 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@devair1010, @vangodp, @AnsiC@isrnick Obrigado, a forma que o Devair disse funcionou, eu sabia do goto porém alguns veteranos do meu curso de Eng. de Computação disseram para não utilizar isso por que os professores (dizem que quebram a lógica do código ou algo assim), descontam ponto em quem usa. Por acaso vocês saberiam me dizer o nome da biblioteca que não permite que o usuário digite letras? E se existe algo que limite o número mínimo que o usuário pode digitar (ex: um cartão de banco da visa que tem 16 números e que caso o usuário queira inserir mais números não seja possível)?

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Feche essa poster.

E cria um novo com essa nova questão. É por uma questão de melhor organização, pois esse novo problema

  • Obrigado 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Alexandre Caribé não é só porque quebra a lógica do código, goto em vários casos gera alguns problemas na hora da compilação. Existe a função isalpha, você pode simplesmente fazer um for e verificar caractere por caractere com a função isalpha.

#include <iostream>       // std::cout, std::cin
#include <iomanip>        // std::boolapha
#include <string>         // std::string
#include <cctype>         // isalpha

bool PossuiLetra(std::string Entrada)
{
    for (size_t i = 0; i < Entrada.size(); i++)
    {
        if (isalpha(Entrada[i]))
            return true;
    }
    return false;
}

int main()
{
    std::string Teste1 = "123456789A";
    std::string Teste2 = "123456789";
    std::string Teste3 = "----...";

    std::cout << "Possui letra? " << std::boolalpha << PossuiLetra(Teste1) << std::endl;
    std::cout << "Possui letra? " << std::boolalpha << PossuiLetra(Teste2) << std::endl;
    std::cout << "Possui letra? " << std::boolalpha << PossuiLetra(Teste3) << std::endl;

    std::cin.clear();
    std::cin.get();

    return 0;
}

 

Saída:

Citação

Possui letra? true
Possui letra? false
Possui letra? false

 

Para limitar os dígitos você pode verificar a quantidade de digitos, se for maior que 16 você limpa os outros.

 

Exemplo:

#include <iostream>
#include <string>
  
int main()
{
    std::string entrada;

    std::cin >> entrada;

    if (entrada.size() > 16)
    {
        std::cout << "Entrada maior que 16.\n";
        
        for (size_t i = 16; i < entrada.size(); i++)
            entrada[i] = '\0';
    }

    std::cout << entrada << std::endl;
    
    return 0;
}

Entrada:

Citação

34932190312390902312945012059120120439129401234909011249014901091412029490123901239

 

Saída:

Citação

Entrada maior que 16.
3493219031239090

 

Editado por cyer
  • Obrigado 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, cyer disse:

goto em vários casos gera alguns problemas na hora da compilação

Não sabia, dá um exemplo?

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
10 minutos atrás, AnsiC disse:

Não sabia, dá um exemplo?

 

Escrevi um exemplo simples, testei no Visual Studio e gerou esse erro por conta do "goto" e da inicialização da variável depois do goto.

 

Esse é um exemplo que me lembro, no momento só lembro desse, mas tem vários outros problemas que são gerados pelo goto.

 

13A4gXK.png

 

#include <iostream>				// std::cout
#include <Windows.h>				// OpenProcess
 
int main()
{
    HANDLE Processo = OpenProcess(PROCESS_ALL_ACCESS, false, 0x10);

    if (Processo == NULL)
    {
        std::cout << "Falha ao abrir o processo.\n";
        goto final;
    }

    int erro = 0; // Essa declaração apos o goto vai ser onde vai gerar o erro na compilação, por conta de inicializar a variável apos um goto
  
    final:
    if (Processo)
        CloseHandle(Processo);

    std::cout << "Saindo.\n";

    return EXIT_SUCCESS;
}

 

Editado por cyer
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, de fato para pessoas iniciante / inexperientes na arte do goto, o bicho pega.

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
agora, AnsiC disse:

É, de fato para pessoas iniciante / inexperientes na arte do goto, o bicho pega.

 

 

O maior problema em usar goto, nem sempre é os erros, mas sim porque quebra completamente a lógica do código

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, cyer disse:

O maior problema em usar goto, nem sempre é os erros, mas sim porque quebra completamente a lógica do código

É, também! Ainda bem que essas questões não foram o bastante para remover essa palavra chave, e espero que nunca seja porque gosto muito do poder por traz de simples palavra que desbanca todo resto das declarações de loop.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
50 minutos atrás, AnsiC disse:

É, também! Ainda bem que essas questões não foram o bastante para remover essa palavra chave, e espero que nunca seja porque gosto muito do poder por traz de simples palavra que desbanca todo resto das declarações de loop.

@AnsiC fique tranquilo, nunca irão retirar o goto da linguagem. Que aconteceria com as centenas de códigos antigos que contêm goto? Não poderiam ser compiladas. Incluindo o linux? :tw_grimace:

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
54 minutos atrás, vangodp disse:

@AnsiC fique tranquilo, nunca irão retirar o goto da linguagem. Que aconteceria com as centenas de códigos antigos que contêm goto? Não poderiam ser compiladas. Incluindo o linux? :tw_grimace:

 

Da linguagem C não podem retirar, mas da linguagem C++ podem retirar o goto, inclusive já fizeram algo parecido na nova versão do C++ Moderno chamada de "C++ 11", na versão mais recente do C++(C++ 17), retiraram a keyword register, é provável que nas próximas versões do C++ moderno retire algumas "keywords" que são inúteis nos dias de hoje da mesma forma que o register é.

 

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4340

https://stackoverflow.com/questions/20618008/replacement-for-deprecated-register-keyword-c-11

Editado por cyer
  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

6 horas atrás, cyer disse:

Da linguagem C não podem retirar, mas da linguagem C++ podem retirar o goto

Sempre achei que C++ fosse extensão da linguagem C, até mais que isso, que todo código C++ é reduzido a C antes de assemblear. Então poderias usar o goto em C++ da mesma formo que consigo em C'11?

Deixa pra lá, com goto e sem goto não tenho intenção de aprender c++

Editado por AnsiC
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em um principio sim c++ era uma extensão C, mas agora não, foi totalmente reescrito e é independente.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 horas atrás, AnsiC disse:

 

Sempre achei que C++ fosse extensão da linguagem C, até mais que isso, que todo código C++ é reduzido a C antes de assemblear. Então poderias usar o goto em C++ da mesma formo que consigo em C'11?

Deixa pra lá, com goto e sem goto não tenho intenção de aprender c++

 

Antigamente era sim isso, hoje em dia esse pode se dizer que esse conceito mudou, C++ está praticamente superior(ou quase) que o C(no quesito de recursos, funções e projetos), ainda perde um pouco no desempenho em comparação a linguagem C, mas não é grande coisa, tanto que aplicativos que precisam do máximo desempenho possível, como jogos, a maioria hoje em dia é feita em C++.


Um bom programador tem sempre que se manter atualizado para o mercado de trabalho.

 

Se você aprende a programar em C++ você aprende a programar em qualquer linguagem Orientada a objetos(Java, C# e varias outras).

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, cyer disse:

Um bom programador tem sempre que se manter atualizado para o mercado de trabalho

C é a linguagem dos efeitos especias do Cinema desdo do Filme ET até Avatar.

C está em todos sistema operacionais famosos.

C language é a célula de todo programa que você já usou e vai usar **.

C não é produtiva verdade. "O que me irrita nas linguagens super produtivas como Python (em termos de produtividade C++ perde feio para Python) é que só seleto grupo de pessoas sabem o que realmente está acontecendo;"

C faz parte de 'todos compiladores / interpretadores' exemplo no mundo Python que  é baseado em java que é baseado C++ que é baseado em C; 

C language é a linguagem da chamada heurística que faz a verdadeira programação, programação essa feita por grandes programadores de compiladores.

C só perde para Java; Até sua filha C++  fica em 'terceiro todos os anos' ... :D 

---------------------------

Top Language 2018

 

** voce gosta de fazer pipoca e ligar sua tv e assistir um filminho? Isso só foi possível porque C fez a ponte entre o humano e o controlador digital da Tv e do Microondas e de quase todo aparelho domestico até a porta da garagem.

 

C é o mais perto que podermos chegar da máquina :P

 

"Nenhuma técnica de programação resolve todos os problemas.
 Nenhuma linguagem de programação produz apenas resultados corretos.
 Nenhum programador deve iniciar cada projeto do zero"

 

C é para quem tem calma de aprender, e não ficará por isso fora da diversão.

Editado por AnsiC
Correção
  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnsiC onde você mora encontra muito mercado para linguagem C? Pois onde eu moro não.

 

Citação

C é o mais perto que podermos chegar da máquina

Não, podemos programar em algo muito mais baixo, como por exemplo em Assembly, utilizando até IDEs para C/C++, como por exemplo o Visual Studio ou CodeBlocks, ambos possuem suporte para inline assembly.

 

Tudo que se pode fazer em C pode fazer em C++ e em 99% dos casos de uma forma até melhor.

Editado por cyer
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
2 horas atrás, cyer disse:

onde você mora encontra muito mercado para linguagem C? Pois onde eu moro não.

Em nenhum momento estou pedindo para você abandonar uma coisa pela outra; Pelo contrario faça como quiser e siga a tendencia de sua região.

 

2 horas atrás, cyer disse:

Tudo que se pode fazer em C pode fazer em C++ e em 99% dos casos de uma forma até melhor.

Será! Sei não ein!

  • Obrigado 1
  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, AnsiC disse:

Em nenhum momento estou pedindo para você abandonar uma coisa pela outra; Pelo contrario faça como quiser e siga a tendencia de sua região.

Eu não falei que ia abandonar ou trocar, só perguntei porque na minha região você dificilmente vai encontrar trabalhos para programadores em C, a maioria prefere o C++(embora ainda prefiro a linguagem C), apenas para você ter uma ideia de como o C++ está ficando cada vez mais forte no mercado

Editado por cyer
  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 horas atrás, cyer disse:

Eu não falei que ia abandonar ou trocar, só perguntei porque na minha região você dificilmente vai encontrar trabalhos para programadores em C, a maioria prefere o C++(embora ainda prefiro a linguagem C), apenas para você ter uma ideia de como o C++ está ficando cada vez mais forte no mercado

Valeu

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

×