我的bool函数保持返回true,我不知道为什么

时间:2017-02-03 23:11:24

标签: c++ arrays function boolean

我正在做练习表以了解功能,我目前正在处理以下问题。

为以下各项编写函数原型:

  1. 一个函数HasValue,可以传递对数组的引用,数组的大小和a 搜索价值。如果数组
  2. 中存在搜索值,则该函数应返回true

    在我的代码中,我已将数组的内容,数组大小和要在数组中搜索的值发送到bool函数。

    在函数中,我使用for循环将值与数组的每个元素进行比较。

    然后我在函数中创建了一个变量计数,如果该值与数组中的任何元素匹配,它将递增。

    然后,如果count大于0,我使用if else语句返回true,如果count等于0,则返回false。但问题是函数只返回true,因此输出将永远是“这个数字出现在数组中”

    从逻辑上讲,这些步骤对我来说似乎是正确的,但显然我无法看到某个缺陷。我认为它只是我对Bool函数没有一个正确的理解但是如果有人可以解释我出错的地方和原因,那么在学习过程中理解函数和c ++将会非常感激。

    #include <iostream>
    #include <iomanip>
    #include "stdafx.h"
    
    using namespace std;
    
    bool HasValue(int Array[], int size, int Value);
    
    int main()
    {
        int value;
        int Array[10]{ 3,5,6,8,9,1,2,14,12,43 };
    
        cout << "enter value you wish to search for in array " << endl;
        cin >> value;
    
        HasValue(Array, 10 , value);
    
        if (true)
            cout << "This number appears in the array " << endl;
        else
            cout << "This number does not appear in the array " << endl;
    
        return 0;
    }
    
    bool HasValue(int Array[], int size, int Value)
    {
        int count = 0;
    
        for (int i = 0; i < size; i++)
        {
           if (Value == Array[i])
           {
               count++;
           }    
        }
    
        if (count > 0)
        {
            return true;
        }
        else
            return false;
    }
    

2 个答案:

答案 0 :(得分:3)

您测试代码是问题

HasValue(Array, 10 , value);
if (true)
    cout << "This number appears in the array " << endl;
else
    cout << "This number does not appear in the array " << endl;

这会忽略HasValue的返回值,并始终打印"This number appears in the array"

答案 1 :(得分:3)

keep_backups

这行代码执行该函数但忽略返回的值。当函数返回值时,您需要将其分配给变量:

HasValue(Array, 10 , value);

然后bool result = HasValue(Array, 10 , value); 没有对返回值的任何引用。 if中的if (true)将导致第一个true始终打印。您永远不会看到cout的输出。但是,如果您在变量中有返回值,则可以在else

中使用它
if

如果需要,您可以将所有内容减少到一行代码:

if(result)

现在if(HasValue(Array, 10 , value)) 语句将直接测试if的返回值。在这种特殊情况下,将代码组合成一行似乎是合理的。不过,你必须小心这样做。当您将太多组合成一行时,代码变得更难以调试。在继续学习如何编程时,您需要在可读性和便利性之间找到平衡。