Функция Cin.getline () в операторе if

0
while (true)
{
    cout << "Please enter a  some text: ";
    cin.getline( sendbuf, 100, '\n' );
    i = i + 1;
    if (? = "q") // here i am looking for something that if i press q i should come out of look
    {
        break;
    }
}

Я новичок и хочу узнать больше. Я хочу спросить, могу ли я предоставить какой-нибудь способ завершить этот цикл, набрав char 'q' после ввода всех данных моей строки желаний.

РЕДАКТИРОВАТЬ мой sendbuf это char * sendbuf, так что я не думаю, что использование std :: string поможет мне.

  • 2
    if (strcmp (sendbuf, "q") == 0)
Теги:

3 ответа

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

Не используйте массив символов, используйте класс std::string и вы получите сравнение с == бесплатно:

#include <string>

std::string line;
while (true) {
    cout << "Enter string: ";
    std::getline(cin, line);
    if (line == "q" || line == "Q") break;
}

Таким образом, размер строки не ограничивается размером sendbuf.

Если позже вам нужно отправить данные функции, которая ожидает char*, вы берете адрес первого элемента (&line[0]) или просто вызываете line.data(). Там также функция члена size которая возвращает, как вы догадались, размер строки. Вы никоим образом не ограничены архаичными интерфейсами, которые работают с массивами символов C-стиля. Строка представляет собой массив символов, в конце концов.

Рекомендуемое чтение: строковая документация.

  • 0
    if (line.back() == 'q' || line.back() == 'Q') не должно быть, if (line.back() == 'q' || line.back() == 'Q') ? Он хочет проверить последний символ после предоставления ввода.
  • 0
    Может быть ... это не все так ясно для меня.
Показать ещё 2 комментария
0

Очевидное решение - использовать std::string и поместить все ваши тесты в состояние while:

std::string line;
while ( std::getline( std::cin, line ) && line != "q" ) {
    //  ...
}

На практике вам, вероятно, понадобится более сложный тест на line, вероятно, выведенный в отдельную функцию. Аналогично, если вы всегда хотите получить подсказку:

std::istream&
getLineWithPrompt( std::istream& source, std::string const& prompt, std::string& line )
{
    std::cout << prompt;
    return std::getline( source, line );
}
0
if ( !cin || std::strcmp( sendbuf, "q" ) == 0 ) break;

Ещё вопросы

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