字符类型的函数检查值

Function checking values of type chars

本文关键字:检查 函数 类型 字符      更新时间:2023-10-16

我是编程新手,有一个练习,我创建了一个函数来检查 char 类型的数组是否包含特定值。这是我的函数:

bool arrCheck(char n[],char pos1,char pos2,char pos3,int size)
{
    int n1,n2,n3;
    for (int i=0;i<size;i++)
    {
        if (n[i]==pos1)
        {
            n1=1;
        }
        if (n[i]==pos2)
        {
            n2=1;
        }
        if (n[i]==pos3)
        {
            n3=1;
        }
    }
    if ((n1==1)&&(n2==1)&&(n3==1))
    {
        return true;
    }
}

这是我的测试程序:

int main()
{
    char a[5]={'6','1','a','a','a'};
    if (arrCheck(a,'1','6','9',5))
    {
        cout<<"truen";
    }
}

我以为结果应该是假的,但我得到的都是真的。我做错了什么?

n1n2n3是默认初始化的,它们一开始具有不确定的值。在检查其值之前初始化它们。即使条件为假,也不要忘记返回一些东西。

试试这个:

bool arrCheck(char n[],char pos1,char pos2,char pos3,int size)
{
    int n1=0,n2=0,n3=0;
    for (int i=0;i<size;i++)
    {
        if (n[i]==pos1)
        {
            n1=1;
        }
        if (n[i]==pos2)
        {
            n2=1;
        }
        if (n[i]==pos3)
        {
            n3=1;
        }
    }
    return (n1==1)&&(n2==1)&&(n3==1);
}

使用 bool 存储布尔值并使用 const 标记数组的内容不会更改可能会更好。

bool arrCheck(const char n[],char pos1,char pos2,char pos3,int size)
{
    bool n1=false,n2=false,n3=false;
    for (int i=0;i<size;i++)
    {
        n1=n1||(n[i]==pos1);
        n2=n2||(n[i]==pos2);
        n3=n3||(n[i]==pos3);
    }
    return n1&&n2&&n3;
}

1) 使用布尔变量而不是三个 int 变量
2)初始化它(你还没有初始化int变量,它们有随机垃圾值)
3)还添加else条件以返回假值(你的代码不返回假)。
4)使用其他条件在主函数中打印假。
希望这对你有帮助..!

代码没问题。您只是忘记添加一些语句,这导致了错误(您可能很愚蠢,也可能不是愚蠢的)。

您对函数arrCheck()的定义不完整。如果满足某个条件,它会返回true,但如果不是呢?在这种情况下,您必须返回 false .但是在您的代码中,永远不会返回 false。因此,首先,您必须在 arrCheck() 方法中的最后一个 if 语句之后添加一个 else 语句:

if((n1==1)&&(n2==1)&&(n3==1)){
    return true;
}
else{
    return false; //this has to be added
}

如果遇到这种情况,它现在可以返回false
此外,如果 arrCheck() 返回 false,则必须在 main 方法中显示"false"。建议在main()方法的if语句后添加else语句。请参阅下面的修改:

if (arrCheck(a,'1','6','9',5))
{
    cout<<"truen";
}
else{
    cout<<"falsen"; //it must show false;
}

更正这些内容后,代码将生成正确的输出。


附言本答复是对@KUSHAGRA GUPTA先前提交的答复的阐述。

int n1,n2,n3;

此行会导致未定义的行为,因为您没有初始化变量,而是稍后尝试从中读取变量,即使并非所有变量都被分配了一个值:

if ((n1==1)&&(n2==1)&&(n3==1))

通过将变量初始化为 0 来修复未定义的行为:

int n1 = 0;
int n2 = 0;
int n3 = 0;

还有另一种未定义行为的情况,即您的函数没有说明在条件不为真时要返回的内容。也修复此问题:

if ((n1==1)&&(n2==1)&&(n3==1))
{
    return true;
}
else
{
    return false;
}

或者简单地说:

return (n1==1)&&(n2==1)&&(n3==1);
将该

行更改为如下所示。int n1= 0,n2= 0,n3 = 0;因为当未初始化时,这些变量具有垃圾值。

bool arrCheck(char n[],char pos1,char pos2,char pos3,int size)
{
    int first = 0,second = 0, third = 0; 
    for (int i=0;i<size;i++) {
        if (n[i]==pos1) {
         first = 1;
        } else if (n[i]==pos2) {
          second = 1;
        } else if (n[i]==pos3) {
          third = 1;
        }
   }
   if( first+ second + third == 3) 
       return true;
   else
      return false;
}