1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Voltar ao inicio do programa(sem loops)

Discussão em 'Programação' iniciada por Ir0nMaid3n**, 27 de Outubro de 2008. (Respostas: 15; Visualizações: 2843)

  1. Ir0nMaid3n**

    Ir0nMaid3n** Power Member

    Código:
    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    int main( void){
        int certo=0, errado=0;
        char line[1024];
    
            printf("\n qual e a capital de lisboa?\n");
            gets(line);
            if(strcmp(line, "Portugal") == 0){
                printf("certo");
                printf("\n qual e a nacionalidade de camoes\n");
                gets(line);
                if(strcmp(line, "portugues") == 0)
                printf("esta certo");
                else printf("erro de comando tente outra vez");
                printf("\n quem foi magritte\n");
                gets(line);
                if(strcmp(line, "pintor") == 0)
                printf("certo");
                else printf("errado");
            }
            else printf("erro de comando chama o 112");
            Sleep(2000);
            return 0;
    }
    Sintaxe de if com string de caracteres
    
    Pronto este e o codigo
    O que eu queria era , sem loops , por exemplo se o utilizador errasse numa questão voltava ao inico mas sem loops
    isto dava-me jeito para um jogo de texto que queria desenvolver em C em que quando a variavel VIDA era igual a 0 volatava ao inicio do programa
    cumps ir0n
     
  2. ld50

    ld50 Power Member

    Qual é o problema de usares loops?

    Isso da "Capital de Lisboa" é a gozar ou a sério?
     
  3. MadOnion

    MadOnion Folding Member

    LOL :x2:
    Sorry, mas não resisti.

    Voltando ao tópico, se não quiseres usares Loops, a unica solução que vejo é colocares isso numa função auxiliares e chamares a ela própria(ou seja, usando recursividade).
     
  4. Ir0nMaid3n**

    Ir0nMaid3n** Power Member

    claro que e a brincar xD
    tipo podias exemplificar isso em codigo
    tipo eu nao queria usar loops porque so queria que tipo quando a variavel ficasse a 0 o programa voltava ao inicio se isso for possivel com loops claro que quero usa-los mas com os meus conhecimentos noobs de C acho que nao é.
    cumps ir0n
     
  5. Diogo Pinho

    Diogo Pinho Power Member

    se não estou em erro em C++ não existe "gotoxy"?

    se não existe já vi em algum lado... em pascal talvez
     
  6. Aparicio

    Aparicio /dev/mod
    Staff Member

    Isso que queres de simplesmente voltar ao início até é possível com o goto, mas nunca se deve usar.

    De certeza que a forma correcta de fazer o que queres é usar um loop, só não consigo relacionar o que pretendes com o código que mostraste.
     
  7. Diogo Pinho

    Diogo Pinho Power Member

    Aparicio tem razão...

    eu apenas falei do "Goto" pois era pedido uma alternativa sem loop
    e como já foi falado da recursividade a unica coisa que me ocorreu foi mesmo o "Goto"

    mas concordo mais uma vez com o Aparicio porque não usares loop?
     
  8. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Diogo Pinho, falaste do gotoxy, e isso é um "Locate" nas coordenadas do ecrã, mais lá para os tempos do MS-DOS :P Provavelmente enganaste-te, mas são coisas bastante diferentes (acho que GotoXY é Pascal, sim).
    O QBasic tinha o Locate, o Pascal tinha o GotoXY.

    @ tópico, subscrevo na íntegra a resposta do Aparício. O melhor método é usando loops (afinal, eles são flow-control), e nunca usar o Goto. Para vosso bem :D
     
  9. Ir0nMaid3n**

    Ir0nMaid3n** Power Member

    Mas os loops permitem-me ir para qualquer lugar no programa?
    O que eu queria fazer neste codigo e quando o utilizador errava o programa comecava outra veze voltava ao inicio mas o utilizador so poderia errar 3 vezes uma vez que a variavel errado chegava a 3 a utilizador via um printf a dizer que tinha perdido e colocava-se um comando para o programa acabar.
    Peço desculpa se nao fui explicito
    Queria inserir no programa um loop para efectuar essa acção mas tambem gostava de compreender como usar um loo para ir a putras partes do do codigo..
    Se eu conseguir fazer isso com loops tudo bem...
    cumps ir0n
     
    Última edição: 27 de Outubro de 2008
  10. MadOnion

    MadOnion Folding Member

    Crias uma variavel global:
    Código:
    static int contador;
    
    No main tens:
    Código:
    ...
    contador = 0;
    jogo();
    ...
    
    E na função jogo(), se no final da função, a resposta for errada:
    Código:
    ...
    if (contador < 3) {
        contador++; 
        jogo();
    }
    ...
    
    Algo do género.
     
  11. Aparicio

    Aparicio /dev/mod
    Staff Member

    Se estou a perceber o que pretendes uma forma para fazeres isso era teres uma função com as perguntas que retorna por exemplo 1 se se acertar todas as respostas e 0 quando se errasse alguma. O main tinha um ciclo que chamava a função das perguntas enquanto não retornasse 1.

    O melhor era mesmo estudares loops e funções antes de fazeres isso.
     
  12. Ir0nMaid3n**

    Ir0nMaid3n** Power Member

    podiam exemplificar em codigo por favor?
    cumps ir0n
     
  13. tiagopestana

    tiagopestana Power Member

    Podes explicar-me melhor porquê? Essa é uma daquelas coisas que eu sempre ouvi dizer, mas nunca me lembro de ter visto uma boa explicaçao.
     
  14. souto

    souto To fold or to FOLD?

    Há muita mística em torno do goto. A verdade é que se pode usar (nada de ir a correr agora começar a escrever goto no código), com disciplina (muita disciplina).
    Há situações em que o código fica mais limpo com goto's, especialmente em C. Mas são casos raros, mais comuns em código de kernel, por exemplo.

    É uma questão de ponderar os pros e os contras de cada abordagem... Ponderar é ponderar mesmo.

    Quanto a usar recursividade dessa forma, cuidado. É a chamada martelada à sapateiro. Desde possibilidade overflows de stack, dificuldade a fazer debug...

    PS: Para quem quiser levantar a mística em torno dos goto's: http://kerneltrap.org/node/553/2131
     
    Última edição: 29 de Outubro de 2008
  15. tiagopestana

    tiagopestana Power Member

    Obrigado, isso foi uma leitura interessante.
     
  16. diutsu

    diutsu [email protected] Member

    Tenta isto:

    Código:
    /* os teus includes aqui */
    
    int main(void)
    {
        /* declara aqui as tuas variaveis */
        int contador = 0;
        do
        {
        certo = 0;
        errado = 0;
            /* o teu codigo aqui*/
        
        if ( errado != 0)
            contador ++;
        }
        while (contador < 3 || certo = 3); /* vais ter de alterar o valor  do certo*/
                                            /* sempre que adicionares uma questão */
        return 0
    }
    
    
    sou não n00b nisto como tu.
    por isso se alguem vir alguma coisa mal é fazor dizer

    Edit: reparei agora que não registas as respostas do utilizador numa variavel. (inicias a variavel, mas não tens nada que a incremente se a resposta for errada, para que o programa funcione tens de lhe adicionar essa funcionalidade.
     
    Última edição: 29 de Outubro de 2008

Partilhar esta Página