我目前正在研究这个源代码,我想知道为什么这个逻辑实现不起作用?
有效的逻辑:
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 ...
答案 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的更多信息。