1
#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」内の条件が常に false になるのはなぜですか?
  2. 問題を解決する最も簡単な方法は何ですか?
4

1 に答える 1

2

ファイルの終わりに到達すると条件が満たされますが、コンソールには自然な EOF がないため、終わりがどこにあるかを明示的に伝える必要があります。Windows では ctrl+z、Unix では ctrl+d を押すと、EOF 文字をコンソールに入力できます。動作するサンプル実行を次に示します。

入力

Chris
^Z

出力

Hi Chris
于 2012-07-23T18:02:14.577 に答える