有关while语句后跟表达式的理解
举一个例子:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n=0;
string word;
while(cin> > word) //此处不能理解
{
if (word.size() <5)
continue;
n++;
}
}
程序中while循环体的作用在我看来是“迫使”用户输入一个字符串,但如果是这样,那就是要对cin> > word的运算结果进行真假判断,这样可以(或者说符合iostream库的容器定义)吗?
另外,如果使用内建的char数组替代string类型(型别),这样写是否可以达到同样效果:
char word[100];
for (i=0,i <100,i++)
word[i]=0; //初始化每个元素为0
while(cin> > word[i])
{
if(word==0)
continue;
}
恳请各位指教!
[解决办法]
while(cin > > x)等价于
cin > > x;
while(cin.good())
{
.....
cin > > x;
}
[解决办法]
istream和ostream类型也依靠转换函数,这使我们可以写下面这类语句:
while(cin> > x)cout < <x;
输入操作cin> > x返回istream&,这个值将被隐式转换到一个表明cin状态的值,而这个值将由while检测。当然,通常定义这样的转换并不是一个好主义,以这种方式从一个类型隐式转换到另一个,并在转换中丢失了信息。
[解决办法]
while(cin> > word) //此处不能理解
当 cin流出错时候 while 终止,
即输入 ctrl+z 时候结束.
[解决办法]
你要用char输入的话,要在循环里做。
while(cin> > word) //判断输入的字符串是否结束
{
if (word.size() <5) //如果长度小于5继续循环并不计数
continue;
n++; //如果长度大于等于5计数加1继续循环
}
[解决办法]
另外还想问一个小问题:endl是C++而不是C引入的换行标志吧?
------------------------------------------------------
是的.endl会刷新缓冲区, '\n '不会