2
respostas

Erro bem na linha do for

Pessoal o meu código esta dando um erro bem no (for) alguém esta vendo algo de errado?????

#include<stdio.h>
#include<string.h>

int main() {
    char palavrasecreta[20];
    sprintf(palavrasecreta, "MELANCIA");

    int acertou = 0;
    int enforcou = 1;

    do {
        char chute;
        scanf("%c", &chute);

        for(int i = 0; i < strlen(palavrasecreta); i++) {
            if(palavrasecreta[i] == chute) {
                printf("A pocisao %d tem essa letra!\n", i);
                }
            }
        } while(!acertou && !enforcou);
    }

}
2 respostas

Opa, se tu remover uma chave do final do código e declarar o 'i' antes do for, vai funcionar.

int i = 0; for(i = 0; i < strlen(palavrasecreta); i++)

...

} while(!acertou && !enforcou); } //ultima chave

Qual a mensagem de erro do compilador?

Do ponto de vista de sintaxe os únicos erros são:

  1. uma chave direita sobrando;
  2. a função main não possui uma declaração de retorno.

Reescrevi o programa como segue.

#include <ctype.h>
#include <stdio.h>
#include <string.h>

static inline char pegar_entrada() {
    char c;
    while ((c = getchar()) == '\n');
    return isalpha(c) ? toupper(c) : '\0';
}

int main(void) {
    const char * const PALAVRA_SECRETA = "MELANCIA";
    const int LIMITE = strlen(PALAVRA_SECRETA);

    int acertou = 0;
    int enforcou = 1;

    do {
        for (int i = 0; i < LIMITE; i++)
            if (PALAVRA_SECRETA[i] == pegar_entrada())
                printf("A pocisao %d tem essa letra!\n", i);        
    } while (!acertou && !enforcou);

    return 0;
}

Observação: o programa só é válido para compiladores compatíveis com o padrão ISO C99 ou superior.