if(!getline(std::cin,str1))break;这个条件检查什么
if(!getline(std::cin, str1)) break; what does this condition check?
我有这个代码:
while (true){
std::string cmdline;
if (!std::getline( std::cin, cmdline )) break;
std::istringstream cmdstream( cmdline );
std::string cmd;
cmdstream >> cmd;
...}
if条件检查什么?如果我省略了!
,为什么它会以无休止的循环结束?
由于C++插入了一个与零的隐式比较,因此这行
if (!std::getline( std::cin, cmdline )) break;
相当于
if (!std::getline( std::cin, cmdline ) != 0) break;
或简称
if (std::getline( std::cin, cmdline ) == 0) break;
std::getline
返回调用它的流。流被转换为bool
或void*
,具体取决于C++库的版本。当达到输入的末尾时,转换后的值变为零。这就是为什么当没有额外的输入要读取时循环结束的原因。
另一种编写相同代码的方法如下:
std::string cmdline;
while (std::getline( std::cin, cmdline )) {
std::istringstream cmdstream( cmdline );
std::string cmd;
cmdstream >> cmd;
...
}
这允许您将结束条件放入循环头中,代价是在循环外声明cmdline
。
std::getline
返回对作为第一个参数传递的流的引用,在您的情况下是std::cin
。这意味着你的
if (!std::getline( std::cin, cmdline )) break;
相当于
std::getline( std::cin, cmdline );
if (!std::cin) break;
最后一行相当于
if (std::cin.fail()) break;
如果CCD_ 8在流中提升CCD_。如果I/O错误或流结束条件阻止getline
读取任何内容,就会发生这种情况。
由于根据:http://www.cplusplus.com/reference/string/string/getline/
return参数是输入流,在本例中为std::cin,因此,如果std::cin输入为空,则返回为空。
基本上,用户输入了什么吗?
相关文章:
- 我提出什么条件才能再加5%的折扣
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- 使用枚举作为条件,if 条件将返回什么,真或假?
- 正在连接的等待条件变量的线程会发生什么情况?
- 这个循环测试条件是什么意思?
- if 语句正在检查什么条件
- while 循环条件 c++ 中的","有什么用?
- 有什么东西阻止std::optional::value_or()有条件地不例外吗?
- Haskell中用多态性替换条件的等效模式是什么?
- 为什么 c++ 中需要条件来实现良好的编码实践,即使我们没有什么可写的
- 什么保证两个不相关的线程中的不同不相关对象没有(不可避免的)争用条件?
- 计算文本文件中行数的最佳条件是什么
- 在什么条件下,数据库在从 cpp 执行选择查询时不会关闭游标
- 当使用内存分配函数用作条件语句时会发生什么
- 在什么条件下,纯虚拟方法生成了
- 在条件上更新变量的最快方法是什么?
- 同时执行 if 和 else 条件的逻辑是什么
- #ifdef SWIG:什么时候考虑这种条件编译
- 什么可以唤醒条件变量
- 在 if 条件下调用什么重载运算符