Поиск всех правильных и неправильных символов в массиве - PullRequest
0 голосов
/ 30 декабря 2018

Я пишу код, в котором я хочу проверить, принадлежат ли какие-либо из введенных значений символов в приведенном выше массиве. Если у него нет буквы, я хочу добавить +1 к e.Это мой код:

#include <iostream>
using namespace std;
char word[10] = { 'H', 'o', 'u', 's', 'e' };
bool f1(char x)
{
    int i;
    for (i = 0; i < 10; i++) {
        if (x == word[i]) {
            return true;
        }
    }
}

int main()
{
    char x;
    int e = 0, k = 1;
    while (k <= 10) {
        cin >> x;
        if (f1(x) != true)
            e++;
        k++;
    }
    cout << e << endl;
    return 0;
}

Моя проблема в том, что в результате я получу либо e = 0, либо e = 10, когда я введу символы в массиве и наоборот.

Anyпомощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 декабря 2018

Не все пути кода вашей функции f1 возвращают значение;На самом деле ваш компилятор должен был сказать вам об этом.Так что, если ваш персонаж не найден (т.е. цикл подходит к концу), то функция не определена (поведение), что будет возвращать функция.Если он возвращает true, то это поведение, которое вы наблюдаете.Однако обратите внимание, что в этом случае функция может возвращать что-либо, поэтому вы не можете полагаться на это поведение.

Запись

bool f1(char x)
{
    int i;
    for (i = 0; i < 10; i++) {
        if (x == word[i]) {
            return true;
        }
    }
    return false;
}

, и оно должно работать.

Кстати: обратите внимание, что C-функция strchr предлагает очень похожую функциональность (хотя тогда она работает только для 0 -определенных строк).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...