Что это за поведение cin.getline ()?

0

Я не ищу альтернативы, пытаясь понять, почему C++ делает это.

char name [25];

cin.getline (имя, 25);

Если, например, я перехожу к пределу ввода getline '25', почему он делает это, но спешит через программу, он не останавливается на любом cin.get(), это связано с флагом сбоя?

#include <iostream>
#include <cstring> // for the strlen() function

using namespace std;

int main()
{

char defName[25];
char name[25];

for (int x = 0; x < 25; x++)
{
    if (x != 24)
    defName[x] = 'x';
    else
    defName[x] = '\0';
}



cout << "Default Name: " << defName << endl << endl;

cout << "Please enter a name to feed into the placeholder (24 Char max): ";

cin.getline(name, 25);

name[24] = '\0';

cout << "You typed " << name << endl;
cin.get();

for (int i = 0; i < strlen(name); i++)
    if (name[i] != ' ')
    {
{
    defName[i] = name[i];
}
    }


cout << "Placeholder: " << defName;

    cin.get();
return 0;
}
  • 0
    Вы имеете в виду, что программа не останавливается на cin.get ()? если это так, это может быть причиной того, что \ n оставил непрочитанным getline
  • 0
    Я настоятельно рекомендую перейти на std::string и std::getline .
Теги:

1 ответ

2
Лучший ответ

это связано с флагом сбоя?

Действительно, failbit устанавливается, если вход слишком длинный для буфера. Вы можете проверить это:

if (!cin.getline(name, 25)) {
    cout << "Too long!\n";
}

и, если вы хотите продолжить, очистите его cin.clear() и удалите непрочитанные символы с помощью cin.ignore(-1).

Ещё вопросы

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