【问题标题】:C++ cin and strnicmp not workingC++ cin 和 strnicmp 不工作
【发布时间】:2012-04-17 13:44:12
【问题描述】:
void searchFlight(cust flights[] ,int row)
{    
    clrscr();
    cout << "Search for the flight you are looking for.\n";

    string airport;

    cout << "Enter Departing Flight : ";
    cin >> airport;   //error

    for (int r=0;r<row;r++)
    {
        if (strnicmp(airport, flights[r].airport[20], strlen(airport) ==0) //error  
        {
            clrscr();
            cout << flights[r].name[20] <<endl;
            cout << flights[r].airport[20] <<endl;
            cout << flights[r].destination[20] <<endl;
            cout << flights[r].ticket <<endl;
            cout << flights[r].passangers <<endl;
            cout << flights[r].opCost <<endl;
            cout << flights[r].income <<endl;
            cout << flights[r].netProfit <<endl;;
            pressKey();
        }
    }
    pressKey();
}

对于 cin 错误: 错误 C2678:二进制“>>”:未找到采用“std::istream”类型的左侧操作数的运算符(或没有可接受的转换)

对于 strnicmp 错误: 错误 C2664:“strlen”:无法将参数 1 从“std::string”转换为“const char *”

我已寻找解决此问题的方法,但无法解决。如果这里有类似的帖子可以解决我的问题,我们深表歉意。

【问题讨论】:

  • 你包括“”吗?
  • 您需要使用std::string::length() 来查找std::string 的长度。还要检查是否包含标题 .
  • 确保您已添加 标头。并检查您是否添加了" using namespace std;"

标签: c++ cin


【解决方案1】:

对于 cin 错误:错误 C2678: binary '>>' : no operator found 接受'std::istream' 类型的左操作数(或没有可接受的转换)

#include &lt;string&gt; 添加到您的 CPP 文件中。

对于 strnicmp 错误:error C2664: 'strlen' : cannot convert parameter 1 from 'std::string' to 'const char *'

确认您的 CPP 文件中有 #include &lt;cstring&gt;,并将您的呼叫替换为: strnicmp(airport.c_str(), flights[r].airport[20], strlen(airport.c_str()) ==0.

我怀疑flights[r].airport[20]也是不正确的,但我不知道,因为你没有发布完整的程序。

如果cust::airport 声明为std::string airport;,那么您需要flights[r].airport.c_str()

如果cust::airport 声明为char airport[20];,那么您需要flights[r].airport

【讨论】:

  • 感谢您的回复! #include 有效。我的印象是“使用命名空间标准”就是我所需要的。
  • 我已经按照你说的做了,我得到一个新的错误:cannot convert parameter 2 from 'char' to 'const char *'
  • 查看我最近的编辑;你需要说flights[r].airport不是 flights[r].airport[20]。第一个是数组的名称;另一个是数组中的第 21 个字符。
  • 我认为这已经解决了。非常感谢!
  • strlen(airport.c_str()) 有点傻,你可以只做airport.size()
【解决方案2】:

您是否包含以下内容:

<fstream>
<istream>
<iostream>
<string>

我很确定你忘记了&lt;string&gt;

这是我运行的测试代码,它运行完美!

#include <string>
#include <iostream>

using namespace std;

int main(int, char**)
{
   string foo;
   cin >> foo;
   cout << foo;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    相关资源
    最近更新 更多