Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Somente a primeira letra está sendo verificada

Segui a aula a risca só que meu código está fazendo a verificação da primeira letra as outras mesmo que estejam certas elas o código diz que está errado.

#include <iostream>
#include <string>

using namespace std;

const string PALAVRA  = "MELANCIA";

bool letra_existe(char chute){
    for (int i = 0; i < PALAVRA.size();i++){
        if (chute == PALAVRA[i]){
            return true;
        }
        return false;
    }
}

int main(){

    bool nao_acertou = true;
    bool nao_enforcou = true;

    while (nao_acertou && nao_enforcou){

        char chute;
        cin >> chute;

        if((letra_existe(chute))){
            cout << "Sua letra está na palavra" << endl;

        }else{
            cout << "Sua letra não está na palavra" << endl;
        }
    }

}
5 respostas
solução!

Oi Samuel, o return false tem q ficar fora do for

bool letra_existe(char chute){
    for (int i = 0; i < PALAVRA.size();i++){
        if (chute == PALAVRA[i]){
            return true;
        }       
    }
    return false;
}

kraca que erro mais bobo kkkkkkkkk, muito obrigado

Oi, Luís e Samuel.

Poderiam me dizer por que o return tem que ficar fora do for? Eu entendo que o correto é desse jeito e não botando um else dentro do for e um "return false" dentro do else, pois vi a aula e vi que do outro jeito não dá certo, mas não consigo entender o motivo. Ao meu ver desse jeito equivocado (com else e return false no else) o código iteraria cada letra e caso a letra não tivesse em nenhum valor do i então aí iria para o else e daria o retorno como falso. Mas ele verifica apenas a primeira letra e eu não entendo o motivo disso. Fui claro o suficiente na minha dúvida?

Oi Ciro, vou mostra neste exemplo como seria sem usar o for

Nota: A palavra return também encerra a função

// a PALAVRA  é  "UVA";

bool letra_existe(char chute)
{
        if (chute == 'U') return true;
        else return false;

        if (chute == 'V') return true;
        else return false;

        if (chute == 'A') return true;
        else return false;    
}

Se o 'chute' for igual de 'U' vai retornar true

Se o 'chute' for diferente de 'U' vai retornar false

A função nunca chegar nas outras letras

Neste caso o certo seria:

// a PALAVRA  é  "UVA";

bool letra_existe(char chute)
{
        if (chute == 'U') return true;

        if (chute == 'V') return true;

        if (chute == 'A') return true;

        return false;    
}

O uso do for é para não ficar repetido o if

Imagine ter q fazer if para 'pneumoultramicroscopicossilicovulcanoconiose' ;)

Entendi, Luís, muito obrigado pela ajuda! Acho que parte da minha confusão foi tomar o retorno da função como tendo o mesmo funcionamento de uma variável. Uma variável você poderia por um valor em uma parte do código e depois alterar esse em outra parte mais abaixo. Entretanto, se entendi bem, na função o primeiro retorno que vale de modo que o computador nem leria os outros. É isso? Entendi bem?