После попытки запустить этот простой код я могу ввести значение только один раз, почему?

#c

#c

Вопрос:

После попытки запустить этот простой код я могу ввести значение только один раз, почему? (компилятор — g )

 #include <iostream>

using namespace std;

int main()
{
    char* str = new char[10];
    cin.get(str, sizeof(str));

    char* strline = new char[10];
    cin.getline(strline, sizeof(strline));

    return 0;
}

 

Ответ №1:

cin.get(str, sizeof(str)); считывает первые 7 == 8-1 (1 байт для нулевого разделителя) символов вашего ввода (или до первого разделителя), потому sizeof(str) что возвращает размер указателя, а в вашем случае это 8. Он не очищает поток и не удаляет разделитель по умолчанию n . cin.getline считывает до 7 символов до новой строки. Например, вы вводите Hello Wor и нажимаете enter. cin.get читает Hello W и cin.getline читает or .

Комментарии:

1. В моем случае cin.get читает «Hello W», а cin.getline читает «или». Есть ли какой-либо способ заставить мой код работать так, как задумано?

2. @anxiety_rgb Каков предполагаемый способ? Почему вы используете cin.get and cin.getline ? Вы должны предпочесть std::string