abh*_*tps 0 c++ cin while-loop
我写了一个简单的代码:
#include <iostream>
using namespace std;
int main()
{
int a, b;
while (cin >> a >> b) //Note the cin inside while loop
{
cout << a << b << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
我们知道while循环仅在表达式计算true( 1) 或false( 0)时起作用。怎么cin评价true和false。
还有如何当我输入号码后停止,当我输入一些非数字的同时循环中运行?它是如何评价真假的?
当你写的时候cin >> a,你实际上是在使用std::istream::operator>>,根据这里的引用,这个操作符返回一个istream&对象引用,并把右手边的变量(引用)作为它的参数。这是你如何IT连锁,如:cin >> a >> b。
cin >> a >> b换个角度看这条链,当分解时,就是这两个步骤:
cin >> a返回一些中间值,假设它是x。(您实际上可以尝试auto x = cin >> a.(cin >> a) >> b,当我们使用这个中间值时x,我们可以把它写成x >> b。那么这是什么鬼x?xhere 与 保持相同的位置cin,它是一个istream&类型的对象。
因此,当您谈论trueor 时false,您实际上是在谈论 this 返回的istream&引用是否引用了一个对象,无论是trueor false。这将是false在标准输出捕获一个EOF标志(当你在类Unix系统中按Ctrl-C,或者当您已经阅读到文件的末尾等)。
因此,您的代码可以扩展为
#include <iostream>
using namespace std;
int main()
{
int a, b;
auto x = cin >> a >> b
while (x)
{
cout << a << b << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是像 Visual Studio 这样的 IDE,您可以将鼠标指向变量x,它会提示您x输入istream&.
另外,多亏了 Bob__,这个istream&类可以转换成一个ios::operator bool类,就像这里写的那样,无论它是true或false代表ios_base::iostatethis的 state( ) stream,因此,
使使用流和函数返回对流的引用作为循环条件成为可能,从而产生惯用的 C++ 输入循环,例如
while(stream >> value) {...}或while(getline(stream, string)){...}。此类循环仅在输入操作成功时才执行循环体。
为了进一步理解,您应该阅读教科书中的运算符(重载)章节。
| 归档时间: |
|
| 查看次数: |
7684 次 |
| 最近记录: |