Voltar ao inicio do programa(sem loops)

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
 
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
 
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.
 
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?
 
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
 
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:
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.
 
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.
 
@ 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

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

Obrigado, isso foi uma leitura interessante.
 
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:
Back
Topo