我是编程新手,并参与练习,我在其中创建一个函数来检查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";
}
}
我认为结果应该是假的,但我得到的都是真的。我做错了什么?
答案 0 :(得分:1)
n1
,n2
和n3
是默认初始化的,并且它们首先具有不确定的值。在检查它们的值之前初始化它们。即使条件错误,也不要忘记返回一些东西。
试试这个:
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之前提交的答案。