if语句中的Cin.getline()函数

时间:2014-02-04 18:48:04

标签: c++

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会帮助我。

3 个答案:

答案 0 :(得分:3)

不要使用char数组,使用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风格char数组的古老接口的限制。毕竟,字符串 是一个char数组。

Recommened reading: string class documentation.

答案 1 :(得分:0)

if ( !cin || std::strcmp( sendbuf, "q" ) == 0 ) break;

答案 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 );
}