1

スペースで区切られたファイルを読み取る C++ データ構造クラスのプログラムを作成しています。さまざまなファイルをパイプして操作できるように小さな関数を作成しましたが、cin を使用してユーザー入力を取得したいと思います。バッファがループしているようです。ここでは私の深さを超えていますが、これが私の入力関数です。$ cat filename |でプログラムを実行しています。./コンパイル済みexec. 他の場所でcinを使用してもユーザーの入力を待たず、おそらく解決に役立つ理由を誰かが知っていることを願っていましたか?

    void catchPipe(int dataArray[][9]);
    int main(){
        int inArray[9][9];
        int column;
        catchPipe(inArray);

        cout << "Which column would you like to check?";
        cin >> column;  // This input is skipped totally.
        functionChecksIfInCol(column);  //Function  called with garbage value
        cout << "end program" << endl;
        return 0;
    }

    void catchPipe(int dataArray[][9]){
        int i;
        int n=0;
        int pos=0;
        string mystring;
        while(cin){
            getline(cin, mystring);
            if( n < 9 ){
                for(i = 0; i < mystring.length(); i++){
                    if( (int)mystring[i] != 32 ){
                        dataArray[n][pos] = mystring[i] - '0';
                        pos++;
                    }   
                }pos =0; 
            ++n;
            }   
        }   
    }// end catchPipe()
     //Sample File input:     
    0 8 0 1 7 0 0 0 3   
    0 2 0 0 0 0 0 0 9   
    0 9 0 0 3 0 5 4 8   
    0 0 4 0 9 0 0 0 0   
    0 0 0 7 0 3 0 0 0   
    0 0 0 0 1 0 4 0 0   
    6 1 9 0 8 0 0 5 0   
    7 0 0 0 0 0 0 8 0   
    2 0 0 0 6 4 0 1 0  

ありがとう!

プログラムは inArray を埋めますが、cin への次の呼び出しをスキップします。これは、標準入力がキーボードからLinuxのパイプにリダイレクトされたためだと思いますか? たぶん、別の istream オブジェクトを宣言して、それをキーボードなどに向けることができますか? ここで何をすべきかわからない

4

1 に答える 1

0

ベクトルを使用します。

void cachePipe(std::vector<std::vector<int>> data)
{
    std::string line;
    while (std::getline(std::cin, line))
    {
        std::istringstream iss(line);
        std::vector<int> fill((std::istream_iterator<int>(line)),
                            std::istream_iterator<int>());
        data.push_back(fill);
    }
}
于 2013-10-25T12:10:36.783 に答える