函数检查chars

时间:2016-07-07 09:18:08

标签: c++ arrays function

我是编程新手,并参与练习,我在其中创建一个函数来检查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<<"true\n";
    }
}

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

5 个答案:

答案 0 :(得分:1)

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 :(得分:1)

1)使用bool变量而不是三个int变量
2)初始化它(你没有初始化int变量,它们有随机垃圾值)
3)另外添加else条件以返回false值(您的代码不返回false) 4)使用else条件在main函数中也打印false 希望这可以帮助你......!

答案 2 :(得分:0)

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);

答案 3 :(得分:0)

将该行更改为这样。static void Main() { // No risk of deadlock, as a console app doesn't have a synchronization context RunSearches().Wait(); Console.ReadLine(); } static async Task RunSearches() { string keywords = "Driving Schools,wedding services"; List<string> kwl = keywords.Split(',').ToList(); foreach(var kw in kwl) { Output("SEARCHING FOR: " + kw); await Search(kw); } } static async Task Search(string keyword) { // code for searching } 因为当未初始化时,这些变量具有垃圾值。

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

答案 4 :(得分:0)

代码是正确的。你只是忘了添加一些语句,这导致错误(你可能或可能不是愚蠢的)。

您对函数arrCheck()的定义不完整。如果满足某个条件,它会返回true但如果不满足则会返回false。在这种情况下,您必须返回else。但在您的代码中, false永远不会返回。首先,您必须在if方法中的最后一个arrCheck()语句之后添加if((n1==1)&&(n2==1)&&(n3==1)){ return true; } else{ return false; //this has to be added } 语句:

false

如果遇到这种情况,它现在可以返回arrCheck() 此外,您必须显示&#34; false &#34;如果false返回else,则在主方法中。建议您在if方法中的main()语句后添加if (arrCheck(a,'1','6','9',5)) { cout<<"true\n"; } else{ cout<<"false\n"; //it must show false; } 语句。请参阅以下修改:

console.log((96.74%20).toFixed(2)); // 16.739999999999995

一旦你纠正这些,你的代码将产生正确的输出。

P.S。此答案用于详细阐述@KUSHAGRA GUPTA之前提交的答案。