字符类型的函数检查值
Function checking values of type chars
我是编程新手,有一个练习,我创建了一个函数来检查 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";
}
}
我以为结果应该是假的,但我得到的都是真的。我做错了什么?
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) 使用布尔变量而不是三个 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;
}
- 检查函数返回类型是否与STL容器类型值相同
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- 何时在类中检查函数的定义?
- 素数检查 C++ 函数输出非素数的数字
- 如何检查函数是否真的获得了定义为 const 的变量?
- 检查函数是否可调用
- 如何检查函数是在C++单元测试中的析构函数中调用的
- 使用 SFINAE 检查函数 std::to_string 是否存在类型
- 如何检查函数模板是否专用?
- 如何检查函数中的模板参数是否与给定类型别名的专用化匹配
- 如何检查函数中不同变量的大小
- C++如何检查函数是否接收到无符号int
- 使用模板递归检查函数方法是否存在
- 如何在Visual studio C++中检查函数运行时间
- 检查函数是否单调
- 如何检查函数是否在编译时在全局范围内声明
- 检查函数是否被调用
- Boost.Hana:如何检查函数是否具有特定类型的专用性
- 如何检查函数参数是否恒定
- C++ 编译时检查函数参数