我只是想学习如何使用c ++,我试图做的一件事是肯定或没有选择“选择y继续选择n退出”有点事我知道其他方法这样做其他然后这个方法,但我试图学习在main()之外创建函数的概念更好这是我试图使用的代码
int yesorno(char yn[]);
int yesorno(char yn[])
{
int a=0;
do
{
if (!strcmp( yn , "y" || yn , "Y"))
{
a=1;
}
else if (!strcmp( yn , "n" || yn ,"N"))
{
a=2;
}
else
{
cout<<"Please choose y or n \n";
cin>> yn;
a=3;
}
}while (a==0 || a>=3);
yn = "0";
return a;
}
我得到的错误是“没有用于调用'strcmp'的匹配函数”在if和else if语句中但是在main()中使用strcmp工作得很好而且我有#include只是想知道我做错了什么。非常感谢任何帮助。
答案 0 :(得分:2)
您不能以这种方式将布尔条件插入到函数中:
if (!strcmp( yn , "y" || yn , "Y"))
将条件更改为优先评估函数的布尔结果,然后执行逻辑比较
if (!strcmp(yn , "y") || !strcmp(yn , "Y"))
另请注意,您错过#include <cstring>
以使用strcmp
答案 1 :(得分:0)
您需要在代码顶部附近#include <cstring>
,因为这是标准库头文件,其中包含一个声明,告诉编译器strcmp
。检查这些内容的好网站是cppreference:请参阅here并注意它在顶部附近提到<cstring>
。
此外,您必须单独进行每项测试:
if (!strcmp(yn, "y") || !strcmp(yn, "Y"))
...
Thsi也不会编译:
yn = "0";
您可以使用:
strcpy(yn, "0");
但总的来说,使用C ++的std::string
类型可以大大清理代码:
int yesorno(std::string& yn)
{
int a=0;
do
{
if (yn == "y" || yn == "Y")
a=1;
else if (yn == "n" || yn == "N")
a=2;
else
{
cout<<"Please choose y or n \n";
cin>> yn;
a=3;
}
} while (a == 0 || a >= 3);
yn = "0";
return a;
}