С++ cin и strnicmp не работают

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 *'

Я искал решения этой проблемы и не мог это исправить. Извините, если здесь есть подобный пост, который мог бы решить мои проблемы.


person user1338894    schedule 17.04.2012    source источник
comment
Вы включаете ‹string› ?   -  person karlphillip    schedule 17.04.2012
comment
Вам нужно использовать std::string::length(), чтобы найти длину std::string. Также проверьте, включили ли вы заголовки ‹iostream›, ‹string›.   -  person Mahesh    schedule 17.04.2012
comment
Об этом только что спросили вчера. /10183008/cin-has-no-operand/   -  person Andrew T Finnell    schedule 17.04.2012
comment
убедитесь, что вы добавили заголовки «iostream» и «string». а также проверьте, добавили ли вы использование пространства имен std;   -  person Aneesh Narayanan    schedule 17.04.2012


Ответы (2)


Для ошибки cin: ошибка C2678: двоичный файл '>>': не найден оператор, который принимает левый операнд типа 'std::istream' (или нет приемлемого преобразования)

Добавьте #include <string> в свой файл CPP.

Для ошибки strnicmp: ошибка C2664: 'strlen': невозможно преобразовать параметр 1 из 'std::string' в 'const char *'

Подтвердите, что у вас есть #include <cstring> в вашем файле CPP, и замените свой вызов на: 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.

person Robᵩ    schedule 17.04.2012
comment
Спасибо за ответ! #include ‹string› работает. У меня сложилось впечатление, что «использование пространства имен std» — это все, что мне нужно. - person user1338894; 17.04.2012
comment
Я сделал то, что вы сказали, и я получаю новую ошибку: невозможно преобразовать параметр 2 из 'char' в 'const char *' - person user1338894; 17.04.2012
comment
См. мое последнее редактирование; Вам нужно сказать flights[r].airport, не flights[r].airport[20]. Первый — это имя массива; другой - 21-й символ в массиве. - person Robᵩ; 17.04.2012
comment
Я думаю, что это исправлено. Большое спасибо! - person user1338894; 17.04.2012
comment
strlen(airport.c_str()) немного глупо, когда можно просто сделать airport.size() - person R. Martinho Fernandes; 17.04.2012
comment
Я знаю, что это не часть вопроса... но я попытался добавить вторую часть оператора if, используя '&&' - ‹code›if (strnicmp(airport.c_str(), рейсы[r].airport, strlen(airport.c_str() ) ==0 ) && ( strnicmp (destination.c_str(), рейсы[r].destination, strlen(destination.c_str() ) ==0 ))‹/code›. Это скомпилировано, но не показало, что я хотел - person user1338894; 17.04.2012
comment
@user1338894 user1338894 - Подумайте об этой строке: cout << flights[r].airport[20] <<endl; Она печатает один символ в 21-м месте в массиве с именем flights[r].airport. Это то, что вы хотели? - person Robᵩ; 17.04.2012

Вы включили следующее:

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

Я почти уверен, что вы забыли <string>

Вот тестовый код, который я запустил, и он работал безупречно!

#include <string>
#include <iostream>

using namespace std;

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