@Lisik

Как сравнить с Enter?

Здрасте, я новичек в С++ и у меня возник такой вопрос. Мне нужно, чтобы при вводе имени оно не могло быть просто пустым местом (нажатием клавиши Enter). Для этого я ставлю условие сравнения, но оно не катит. Помогите исправить, пожалуйста.
string name1;
string name1;
	cout << "'Придумай себе умопомрачительное имя': ";
	while (cin.get() != '\n');
	getline(cin, name1);
	if (name1 == '\n') {
		cout << "Ты, вроде как, имя не ввел. Так это, то самое, давай, обзови себя как-нибудь..." << endl;
		goto label3;
	}
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 2
customtema
@customtema
arint.ru
Не надо сравнивать с Enter.

Надо обрезать пробельные символы (пробел, табы, символы новой строки и "перевода каретки") с краёв полученного, и оценивать размер полученной строки. В дальнейшем - работать именно с обрезанной строкой.
Ответ написан
myjcom
@myjcom Куратор тега C++
Можно так
#include<iostream>
#include<string>

using namespace std;

int main()
{
  setlocale(LC_ALL, "Russian");
  system("chcp 1251 > null");
  string s;
  cout << "Введите имя: ";
  while(getline(cin, s))
  {
    if(s.empty())
    {
      cout << "Вы не ввели имя!\n"
           << "Введите имя: ";
      continue;
    }
    break;
  }
  cout << "\nВаше имя: " << s
       << "\nНажмите любую клавишу...";
  cin.get();
}

Если правильнее, как пишет Артем Спиридонов,
Тогда возможно так (Windows)
#include<iostream>
#include<string>
#include<algorithm>
#include<cctype>
#include<clocale>

using namespace std;

/* functions from https://code-examples.net/ru/q/34ef7 */
// trim from start (in place)
static inline void ltrim(string &s)
{
  s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](const auto ch) {
    return !isspace(ch);
  }));
}

// trim from end (in place)
static inline void rtrim(string &s)
{
  s.erase(std::find_if(s.rbegin(), s.rend(), [](const auto ch) {
    return !isspace(ch);
  }).base(), s.end());
}

// trim from both ends (in place)
static inline void trim(string &s)
{
  ltrim(s);
  rtrim(s);
}

int main()
{
  setlocale(LC_ALL, "Russian");
  system("chcp 1251 > null");
  string s;
  cout << "Введите имя: ";
  while(getline(cin, s))
  {
    //upd
    replace_if(s.begin(), s.end(), [](const auto c){return iscntrl(c); }, ' ');
    trim(s);
    //end upd

    if(s.empty())
    {
      cout << "Вы не ввели имя!\n"
           << "Введите имя: ";
      continue;
    }
    break;
  }
  cout << "\nВаше имя: " << s
       << "\nНажмите любую клавишу...";
  cin.get();
}

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы