10
respostas

Problemas com o for

Galera meu for não está funcionando vou inserir o código e o erro, lembrando que estou usando o dev c++.

#include <locale.h>

int main () { // Imprime o cabeçalho do nosso jogo setlocale(LC_ALL,""); printf("****\n"); printf("Bem vindo ao nosso jogo de adivinhação\n"); printf("****\n"); int numerosecreto = 42;

printf("O numero %d é o secreto. Não conta pra ninguem!", numerosecreto);

int chute;
int i;
for(int i = 1; i <= 3; i++) {
    printf("Tentativa %d de 3\n, i");    
    printf("Qual é o seu chute");
    scanf("%d", &chute);
    printf("Seu chute foi %d\n", chute);
    int acertou = (chute == numerosecreto);
    if(acertou) {

    printf("Parabens! Você acertou!\n");
    printf("Jogue de novo, você é um bom jogador!!\n");

} else {
    int maior = chute > numerosecreto;
    if(maior) {
        printf("Seu chute foi maior que o número secreto\n");
    }
    if(chute< numerosecreto) {
        printf("Seu chute foi menor que o número secreto\n");
    }

    printf("Você errou!!\n");
    printf("Mas não desanime, tente de novo!!");
}

} Esse é o erro que esta dando: 15 2 C:\Users\Fernando\Desktop\Curso de Programação\Adivinhação\Programa.c [Error] 'for' loop initial declarations are only allowed in C99 or C11 mode Esse erro também ocorre: 39 1 C:\Users\Fernando\Desktop\Curso de Programação\Adivinhação\Programa.c [Error] expected declaration or statement at end of input

10 respostas

Olá boa noite, parece que falto fechar a chave do if que esta dentro do for " if(acertou) { "

Erro persiste jovem, e olhei as chaves elas estão certa, o erro que dá está relacionado ao loop do for, lembrando que estou usando o Dev c++. Na aba final aparecem esses avisos: 8 2 C:\Users\Fernando\Desktop\Curso de Programação\Adivinhação\Programa.c [Warning] incompatible implicit declaration of built-in function 'printf'. 17 2 C:\Users\Fernando\Desktop\Curso de Programação\Adivinhação\Programa.c [Note] use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code. 17 2 C:\Users\Fernando\Desktop\Curso de Programação\Adivinhação\Programa.c [Error] 'for' loop initial declarations are only allowed in C99 or C11 mode. 28 4 C:\Users\Fernando\Desktop\Curso de Programação\Adivinhação\Programa.c [Error] continue statement not within a loop. 39 13 C:\Users\Fernando\Desktop\Curso de Programação\Adivinhação\Programa.c [Error] break statement not within loop or switch. 44 27 C:\Users\Fernando\Desktop\Curso de Programação\Adivinhação\Programa.c [Error] expected ';' before '{' token.

Olá.

Manda seu código atualizado novamente, parece estar faltando coisa. Aí já ajeita a indentação que ficou estranho na postagem.

Uma coisa que vi é que você declara a variável int i; antes do for, porém dentro do for declara de novo: for(int i = 1; i <= 3; i++). Não precisa do int ali dentro do for, sendo que já declarou antes.

Outra coisa, no seu código, caso o usuário acerte a opção de primeira, ele vai rodar mais as outras vezes, mesmo mostrando a mensagem de parabéns. Você precisa informar o for que ele pode parar de rodar. Pra isso, existe a condição break; . Coloque ela dentro do if de acerto, depois das mensagens de parabéns.

Enfim, mude a questão da declaração da variável dentro do for e roda novamente. Pelo visto, ainda vão dar alguns erros, aí você posta de novo.

Está aí o meu código Bruno:

#include <locale.h>

#define NUMERO_DE_TENTATIVAS 5

int main () { // Imprime o cabe?lho do nosso jogo setlocale(LC_ALL,""); printf("****\n"); printf("Bem vindo ao nosso jogo de adivinhação\n"); printf("****\n"); int numerosecreto = 42;

printf("O numero %d é o secreto. Não conta pra ninguem!", numerosecreto);

int chute;

for (int i = 1; i <= NUMERO_DE_TENTATIVAS; i++); {
    printf("Tentativa %d de %d\n", i, NUMERO_DE_TENTATIVAS);
    printf("Qual é o seu chute? ");

    scanf("%d", &chute);
    printf("Seu chute foi %d\n", chute);

    if(chute < 0) {
        printf("Você não pode chutar números negativos");
        i--;

        continue;
    }
    int acertou = (chute == numerosecreto);
    int maior = chute > numerosecreto;
    int menor = chute < numerosecreto; 

    if(acertou) {
        printf("Parabéns! Você acertou!\n");
        printf("Jogue de novo, você é um bom jogador!\n");

        // PARAR DE EXECUTAR FOR
        break;
    }

        else if(maior) {
            printf("Seu chute foi maior que o número secreto\n");
        } else(menor) {
            printf("Seu chute foi menor que o número secreto\n");
        }

}
printf("Fim de jogo!!!");

}

Então Bruno, olhando o código eu não declarei a variável i antes do for. Ela está declarada somente depois que eu coloco o for, já break ele está no meu código caso haja acertos. No entanto, mesmo que eu erre, não consigo ter três tentativas, na minha opinião não há erro no código, pelo menos não estou conseguindo ver, como sou novo pode ser que sim algo esteja desapercebido por mim, mas alguma coisa me diz que é o programa Dev c++ que não está rodando direito.

Então, no código anterior tinha a variável i declarada antes do for. Mantém ela daquele jeito e tira o "int" do for, só deixando "i = 1". Vi que pode ser limitação da IDE se não me engano, isso de acordo com os primeiros erros que você postou.

Altera isso, roda e copia os erros pra cá novamente, por favor.

Opa boa noite, for (int i = 1; i <= NUMERO_DE_TENTATIVAS; i++); { no seu for antes da chave tem um ponto e vírgula (;). Pelo erro que você posto parece que o problema é esse.

Boa Welington, com certeza isso é um problema!

Bruno fiz o que você sugeriu tirei a variável do loop e a deixei fora, também removi os pontos e vírgula, no entanto o problema persiste, não consigo ter outras tentativas, e quando coloco um número negativo ele não declara o que está no script. Veja o código como ficou.

#include <locale.h>

#define NUMERO_DE_TENTATIVAS 5

int main () { // Imprime o cabeçalho do nosso jogo setlocale(LC_ALL,""); printf("****\n"); printf("Bem vindo ao nosso jogo de adivinhação\n"); printf("****\n"); int numerosecreto = 42;

printf("O numero %d é o secreto. Não conta pra ninguem!", numerosecreto);

int chute;
int i;

for ( i = 1; i <= NUMERO_DE_TENTATIVAS; i++) {
    printf("Tentativa %d de %d\n", i, NUMERO_DE_TENTATIVAS);
    printf("Qual é o seu chute? ");

    scanf("%d", &chute);
    printf("Seu chute foi %d\n", chute);

    if(chute < 0) {
        printf("Você não pode chutar números negativos");
        i--;

        continue;
    }
    int acertou = (chute == numerosecreto);
    int maior = chute > numerosecreto;
    int menor = chute < numerosecreto; 

    if(acertou) {
        printf("Parabéns! Você acertou!\n");
        printf("Jogue de novo, você é um bom jogador!\n");

        // PARAR DE EXECUTAR FOR
        break;
    }

        else if(maior) {
            printf("Seu chute foi maior que o número secreto\n")
       } else(menor) {
            printf("Seu chute foi menor que o número secreto\n")
        }

}
printf("Fim de jogo!!!");

}

Bruno consegui, mas achei estranho, pois faltou um ponto e vírgula nesse local, olha só o código:

#include <locale.h>

#define NUMERO_DE_TENTATIVAS 5

int main () { // Imprime o cabeçalho do nosso jogo setlocale(LC_ALL,""); printf("****\n"); printf("Bem vindo ao nosso jogo de adivinhação\n"); printf("****\n"); int numerosecreto = 42;

printf("O numero %d é o secreto. Não conta pra ninguem!", numerosecreto);

int chute;
int i;

for ( i = 1; i <= NUMERO_DE_TENTATIVAS; i++) {
    printf("Tentativa %d de %d\n", i, NUMERO_DE_TENTATIVAS);
    printf("Qual é o seu chute? ");

    scanf("%d", &chute);
    printf("Seu chute foi %d\n", chute);

    if(chute < 0) {
        printf("Você não pode chutar números negativos");
        i--;

        continue;
    }
    int acertou = (chute == numerosecreto);
    int maior = chute > numerosecreto;
    int menor = chute < numerosecreto; 

    if(acertou) {
        printf("Parabéns! Você acertou!\n");
        printf("Jogue de novo, você é um bom jogador!\n");

        // PARAR DE EXECUTAR FOR
        break;
    }

        else if(maior) {
            printf("Seu chute foi maior que o número secreto\n");
       } else(menor) ;{
            printf("Seu chute foi menor que o número secreto\n");
        }

}
printf("Fim de jogo!!!");

} Quase no final no else (menor) tive que colocar esse ponto e vírgula, viu, por que aqui vai ponto e vírgula e no else if (maior) não antes da chaves? Alguém pode me explicar

Eita! Não faz sentido esse ponto-e-vírgula aí.

Depois vou baixar a IDE que está usando e tentar rodar seu código, mas está estranho mesmo. Estamos deixando passar algo, preciso olhar com mais calma.