C ++ - >>如何?操作员工作?

时间:2016-06-28 13:24:31

标签: c++

我对>>运营商有疑问 我写了一个程序来计算二进制文件中的单词数 我的问题是关于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   example\n";
    a.close();
    b.open("newf.txt");
    int c=0;
    while(b>>w)
    { 
        c++ ;
    }
    cout<<c;
    b.close();
    getch();  
}

2 个答案:

答案 0 :(得分:3)

默认情况下, ifstream 中的运算符&gt;&gt; 会忽略空格。如果要包含空格,则必须使用std :: noskipws操纵符标志,如官方文档here中所示。

答案 1 :(得分:1)

首先,您要摘录为char w[20] 不要这样做。如果提取超过20个字符的刺痛,则会发生坏事。而是使用string w

string::operator>>是由b >> w调用的内容:

  

表现为FormattedInputFunction。在构造和检查可能跳过前导空格的哨兵对象之后,首先使用str清除str.erase(),然后从is读取字符,并将它们附加到str,就像{ {1}},直到满足以下条件之一:

     
      
  • 读取N个字符,其中N为str.append(1, c) is.width(),否则N为is.width() > 0
  •   
  • 文件结束条件发生在流str.max_size()
  • 中   
  • is对于std::isspace(c,is.getloc())中的下一个字符c为真(此空白字符保留在输入流中)。
  •   
     

如果未提取任何字符,则is上会设置std::ios::failbit,这可能会is

     

最后,调用std::ios_base::failure取消os.width(0)的效果,如果有的话。