使用带数组的输入流迭代器

时间:2012-07-23 17:50:22

标签: c++ arrays stream inputstream std

#include <iterator>
#include <iostream>

using namespace std;

const int MAX_NAME_LENGTH=100;

int main()
{
    char name[MAX_NAME_LENGTH];

    cout<<"Introduce yourself\n";

    istream_iterator<char> eos;
    istream_iterator<char> isi(cin);

    for(int i=0;i<MAX_NAME_LENGTH; i++)
    {   
        if(isi == eos) 
        {
            name[i]=0; //Breakpoint is set here.
            break;
        }
        name[i] = *isi;
        isi++;
    }
    cout<<"Hi "<<name<<endl;

    system("pause");


}

当我输入名称并按Enter键时,此程序仍然只生成一个命令提示符。经过调试,结果证明从未达到“if”;似乎流(eos)的末尾无法访问。

  1. 为什么“if”中的条件总是为假?
  2. 解决问题的最简单方法是什么?

1 个答案:

答案 0 :(得分:2)

当到达文件末尾时满足条件,但控制台没有自然的EOF,因此您需要明确告诉它结束的位置。您可以通过在Windows中按ctrl + z或在Unix中按ctrl + d将EOF字符输入控制台。这是一个有效的示例运行:

<强>输入

Chris
^Z

<强>输出

Hi Chris