在while循环比较中实现getline

时间:2014-12-30 00:33:05

标签: c++

我目前正在研究这个源代码,我想知道为什么这个逻辑实现不起作用?

有效的逻辑:

std::cout << "Enter a string (q to quit): ";
std::string str; 
getline(std::cin, str);
while(str[0]!= 'q'){
// do stuff
}

不起作用的逻辑:

std::cout << "Enter a string (q to quit): "; 
std::string str; 
//getline(std::cin, str);
while(getline(std::cin, str) != "q")

我也试过比较&#34; q \ 0&#34;因为我知道getline消除了输入中的换行符,并在末尾添加了一个空字符\ 0,但那也不起作用。这个任务不可能吗?我只想保存几行代码空间ahaha ...

2 个答案:

答案 0 :(得分:4)

std::getline()函数不会返回std::string。它返回std::istream&,可用于链接更多输入操作,需要用于确定输入操作是否成功。你希望你的循环看起来像这样:

for (std::string str; std::getline(std::cin, str) && str != "q"; ) {
    // do whatever needs to be done
}

答案 1 :(得分:1)

代码的问题是getline(std::cin, str)返回istream&,这不是字符串文字。有关std::getline的更多信息。