почему функция bool не возвращает false?

#c

#c

Вопрос:

Мне очень жаль, что я искал и читал похожие вопросы, но не мог понять / использовать их для решения своих собственных.

Я пишу функцию bool в операторе if, но функция, похоже, не возвращает false, что я делаю не так.

Моя функция bool просто проверяет, есть ли в массиве более одного из заданных чисел:

 bool findsame(int a[], int b){
    int k=0;
    for(int i=0;i<20;i  ){
        if(a[i]==b){
            k  ;
        }
    }
    if(k>1){
        
        return true;
    }
    else{
        return false;
    }
}


int main()
{
const int size=20;
int a[size]={4,4};
int b=4;
if(findsame(a,b)){
    cout<<"true";
    }
}
  

Комментарии:

1. Почему она должна возвращать false? На входе 2 4 s.

2. о боже, я имел в виду, что она не возвращает false независимо от того, что я меняю в массиве. «true» не выводится, даже если оно должно быть true.

3. Затем отредактируйте вопрос, чтобы показать ввод, который не дает ожидаемого результата.

4. "true" is not printed out even tho it is supposed to be true. Показанный код печатается true , вы уверены, что проверили правильное окно вывода? i meant it doesnt return false no matter what i change in the array если показанный код ничего не печатает для вас (даже не true ) и поскольку ничего не печатается для false возврата, почему вы предполагаете false , что никогда не возвращается, в этом случае вам нужно ожидать, что false это всегда возвращается?

5. неопределенные значения равны 0, а не null? fml. Тогда я понимаю, почему я поступил неправильно.

Ответ №1:

Я думаю, вы запутались, почему "false" не печатается на консоли, когда функция возвращает значение false.

Вам нужно добавить к дополнительному else оператору для печати false на консоли:

 if(findsame(a,b)){
    std::cout<<"true";
}else{
    std::cout<<"false";
}
  

Кроме того, в массиве есть два значения 4, поэтому они всегда true будут печататься.

Попробуйте передать значение b , отличное от 4 и 0.

Посмотрите на следующую реализацию, где значение переменной b равно 1 :

 #include<iostream>

bool findsame(int a[], int b){
    int k=0;
    for(int i=0;i<20;i  ){
        if(a[i]==b){
            k  ;
        }
    }
    if(k>1){
        
        return true;
    }
    else{
        return false;
    }
}


int main()
{
    const int size=20;
    int a[size]={4,4};
    int b=1;


    if(findsame(a,b)){
        std::cout<<"true";
    }else{
        std::cout<<"false";
    }
}
  

Вывод:

 false  
  

PS: Я также протестировал код для значения b = 4, и он выводит true . Проверьте и запустите код здесь: https://onlinegdb.com/S1LR5PtvD

Комментарии:

1. если вы измените значение b на 4, выводит ли оно true для вас, потому что у меня нет

2. Конечно, np, но я пытаюсь понять, что я сделал не так. Тот, который вы мне прислали, сработал. Это выглядит точно так же, но у меня просто не выводится true.