Ошибка cin.getline при попытке выполнить

0

Я все время получаю сообщение об ошибке при каждом запуске этого кода. Ошибка находится прямо над моим циклом while (строка 13 или 15). Это связано с моей cin.getline.

Ошибка:

1>e:\projects (programming 1)\string\string\string.cpp(15) : error C2664:
'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>
::getline(_Elem *,std::streamsize)' : cannot convert parameter 1 from 'char' to 'char *'

И да, я пробовал использовать cin >> ans; и это дает мне ошибку времени выполнения.

Спасибо, если вам потребуется время, чтобы помочь! : D

// Zachary Law Strings.cpp

#include <iostream>
using namespace std;
#include <string>
#include <iomanip>

int main()
{
    char ans;
    cout << "Would you like to work with the string program? Please type 'y' or 'Y' to execute the program: ";
    cin.getline(ans, 2);
    while (ans == 'Y' || ans == 'y')
    {
        int x, i, y;
        char name[] = "Please enter your name: ";
        char answer1[80];
        string mystring, fname, lname;
        i = 0;
        y = 0;
        cout << name;
        cin.getline(answer1, 79);
        cout << endl;
        x = strlen(answer1);
        for (int i = 0; i < x; i++)
        {
            cout << answer1[i] << endl;
            if (isspace(answer1[i]))
            {
                y = i;
            }
        }
        cout << endl << endl;
        cout << setw(80) << answer1;
        mystring = answer1;
        fname = mystring.substr(0, y);
        lname = mystring.substr(y, x);
        cout << "First name: " << fname << endl;
        cout << "Last name: " << lname << endl;
        mystring = lname + ',' + fname;
        cout << setw(80) << mystring;
        cout << "Would you like to work with the string program again? Please type 'y' or 'Y' to execute the program: ";
        cin >> ans;
    }
    return 0;
}
  • 0
    Вы как бы забыли задать вопрос. Какая помощь тебе нужна?
Теги:
string

1 ответ

0

Для функции std::istream::getline() требуется параметр char*, который должен быть буфером определенного размера.

По крайней мере, для вашего случая, читающего один символ, вы можете предоставить буфер, например

char ans[2];

cin.getline(ans, 1); // << You only want to read a single character

и измените условие цикла на

while (ans[0] == 'Y' || ans[0] == 'y') {
    // ...
}

Предполагается, что std::istream::getline() записывает результаты в буфер char[], в результате чего строка C-стиля с нулевым завершением.

  • 0
    Хорошо, я сделал то, что вы сказали, и теперь он выполняется, но когда я набираю «Y» или «y», он пропускает весь текст моей программы и сразу переходит к return0;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню