strcmp在c ++中的函数中

时间:2014-09-04 06:48:23

标签: c++ function strcmp

我只是想学习如何使用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只是想知道我做错了什么。非常感谢任何帮助。

2 个答案:

答案 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;
}