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 поможет мне.
Не используйте массив символов, используйте класс 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-стиля. Строка представляет собой массив символов, в конце концов.
if (line.back() == 'q' || line.back() == 'Q')
не должно быть, if (line.back() == 'q' || line.back() == 'Q')
? Он хочет проверить последний символ после предоставления ввода.
Очевидное решение - использовать 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 );
}
if ( !cin || std::strcmp( sendbuf, "q" ) == 0 ) break;