#c 11
#c 11
Вопрос:
Я работаю над проектом, и мне нужно протестировать одну из переменных-членов моего класса, чтобы убедиться, что пользователь действительно ввел строку.
Я также пытался использовать (patronName == «) и (patronName == «»), но безуспешно.
Редактировать: использование » n» исправляет ошибку, но программа завершается, не позволяя пользователю ввести имя.
std::string Restaurant::getPatronName()
{
bool controlFlag = true;
do
{
getline(std::cin,patronName);
if ((std::cin.fail()) || (patronName == 'n'))
{
std::cout << "You must enter a name!" << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
}
else
{
controlFlag = false;
}
} while (controlFlag);
return patronName;
}
Функция должна считывать и сохранять имя, введенное пользователем в patronName. При попытке сборки я получаю сообщение об ошибке «нет соответствия для ‘operator=='». Может ли это быть связано с тем, что объект, вызываемый в main, является указателем типа Restaurant?
Комментарии:
1. Вы знаете, в чем проблема, так о чем вы вообще спрашиваете? Вы пытаетесь сравнить строку с символом. Поместите
n
в двойные кавычки:"n"
.2. Использование » n» устраняет ошибку, но программа просто завершается, не позволяя пользователю ввести имя
Ответ №1:
Помимо несоответствия типа между символом 'n'
и std::string
patronName
, мы можем найти вhttps://en.cppreference.com/w/cpp/string/basic_string/getline это std::getline(input, str, delim);
Извлекает символы из входных данных и добавляет их к
str
до […] следующего доступного входного символаdelim
, […], в этом случае символ-разделитель извлекается из входных данных, но не добавляется кstr
.
Таким образом, в первую очередь, не будет никакого 'n'
символа, если delim
это новая строка.
Вы можете использовать std::basic_string::empty()
для проверки, является ли строка пустой.
Ответ №2:
Что происходит с 'n'
, так это то, что вы сравниваете строку с символом, который, как я подозреваю, для этого случая не определен operator== . Если вы уверены, что строка не пуста, вы можете вызвать operator[] formerName[0]
, который возвращает символ.
Ответ №3:
Вы должны написать patronName == "n"
, потому что вы не можете сравнить строку и символ