c++ - >>操作员的工作
C++ - How does the >> operator work?
我有一个关于>>
算子的问题。
我写了一个程序来计算二进制文件中的单词数。
我的问题是关于while循环的,难道>>
不应该读取空格,进入循环,增加c,而不把任何东西放入w吗?
它给我的输出是4,但是算上空格不应该是10吗?
任何帮助都是感激的。我的代码如下:
#include<iostream.h>
#include<conio.h>
#include<fstream.h>
ofstream a;
ifstream b;
void main()
{
clrscr();
char w[20];
a.open("newf.txt",ios::binary);
a<<"This is an examplen";
a.close();
b.open("newf.txt");
int c=0;
while(b>>w)
{
c++ ;
}
cout<<c;
b.close();
getch();
}
默认情况下,ifstream中的运算符>>忽略空格。如果您希望包含空格,则必须使用std::noskipws操纵符标志,如官方文档所示。
首先,您将提取到char w[20]
不要这样做。如果提取的字符串长度超过20个字符,就会发生不好的事情。用string w
代替。
string::operator>>
是b >> w
所调用的,它将:
表现为FormattedInputFunction。在构造和检查哨兵对象(它可能会跳过前导空格)之后,首先用
str.erase()
清除str
,然后从is
读取字符并将它们像通过str.append(1, c)
一样附加到str
,直到以下条件之一为真:
- 读取N个字符,如果
is.width() > 0
则N为is.width()
,否则N为str.max_size()
- 文件结束条件发生在流
is
std::isspace(c,is.getloc())
对于is
中的下一个字符c
为true(该空白字符保留在输入流中)。如果没有提取字符,则
std::ios::failbit
设置在is
上,这可能会抛出std::ios_base::failure
。最后,调用
os.width(0)
来取消std::setw
的效果,如果有的话。
相关文章:
- <<操作员在下面的行中工作
- 复制操作员无法正常工作
- 默认操作员如何在C 中工作
- 有人可以解释C 操作员=此处的工作方式
- OpenCV:文件存储操作员">>"在一个项目中工作,但不在另一个项目中工作(在同一类上)
- 如何与朋友操作员一起在链表下面工作
- C 如果与我期望的语句或操作员无法正常工作
- && 和 ||操作员未按预期工作
- 在抽象类中删除操作员,它如何工作
- C 操作员超载无法正常工作
- 为什么被删除=操作员,我该如何工作
- CPP:超载的嵌套操作员无法正常工作
- 成员操作员不工作
- (C 14)操作员&lt;&lt;超负荷无法正如智能指针向量所预期的那样工作
- 我的操作员=和复制构造函数在我的班级中无法正常工作
- 操作员移动装载的工作原理
- 超载*操作员只能与一个施工人员一起工作
- 操作员过载无法正常工作
- 如何使操作员从对象的左侧工作
- 或操作员不工作