c++ - 将输入流迭代器与数组一起使用

标签 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");


}

当我输入一个名字并按下回车键时,这个程序仍然只产生一个命令提示符。调试后,发现“if”永远达不到;似乎是无法到达流的结尾(eos)。

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

最佳答案

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

输入

Chris
^Z

输出

Hi Chris

关于c++ - 将输入流迭代器与数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11617753/

相关文章:

javascript - 将数据从一个数组复制到另一个数组

c++ - 在 c/c++ 中编辑从 stdin 打印在 stdout 上的文本

c++ - OpenGL库的实现

c++ - unique_ptr : not a member of 'std' 有问题

arrays - VBA 中的数组公式错误

java - 将对象添加到对象数组中

scala - future 不完整?

java - Java 中的套接字和流

c++ - 在命中断点之前向调试器输入数据

c++ - lex/yacc没有成员名称和声明错误