【问题标题】:strcmp in a function in c++ [closed]c++中的函数中的strcmp [关闭]
【发布时间】:2014-09-04 06:48:23
【问题描述】:

我只是想学习如何使用 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;
}

我得到的错误是 if 和 else if 语句中的“没有匹配函数调用'strcmp'”但在 main() 中使用 strcmp 工作得很好,我有 #include 只是想知道我做错了什么.非常感谢任何帮助。

【问题讨论】:

  • 你在 strcmp 中有布尔条件..
  • 如果你学c++,就学会不使用strcmp
  • 1.学习任何东西然后阅读手册页。 2. C++ 使用 std::string。
  • 当我开始编程时,我也有这种误导性的直觉,当你有条件时,例如myvariable == 可以在其中放置逻辑或的东西,例如 myvariable == a ||湾。但这显然是错误的。像数学一样看待它——这不是一个有效的陈述。我的变量 == 一个 || myvariable == b 将是。所以,这样想吧。这同样适用于函数调用 - 所以在你的情况下,你必须 OR 函数调用。正是 Marco A. 所说的。
  • 好的,谢谢 :) 我还处于学习 c++ 的初级阶段,除了简单循环的基础知识之外,我还需要编程任何东西,还有很多东西要学

标签: c++ function strcmp


【解决方案1】:

您不能以这种方式将布尔条件插入函数中:

if (!strcmp( yn , "y" || yn , "Y"))

将条件更改为首先评估函数的布尔结果然后执行逻辑比较

if (!strcmp(yn , "y") || !strcmp(yn , "Y"))

还请注意,您缺少 #include &lt;cstring&gt; 以使用 strcmp

【讨论】:

    【解决方案2】:

    您需要在代码顶部附近添加#include &lt;cstring&gt;,因为这是标准库头文件,其中有一个声明,用于告诉编译器strcmp。检查这些内容的好网站是 cppreference:请参阅 here 并注意它在顶部附近提到了 &lt;cstring&gt;

    此外,您必须分别进行每个测试:

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

    【讨论】:

    • 好的,非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多