0

私が C++ で抱えているこの特定の障壁について、ちょっとしたガイダンスやヘルプを探しています。私はPythonのバックグラウンドから来ているので、いくつかのことは私を混乱させます. コマンドライン引数としてテキストファイルを取り、テキストで読んだものに変数を解析/割り当てようとしています。私は非常に単純なテキスト ファイルを作成しました。これは、非常に単純な cpp ファイルと思われるものです。ここで回答したのを見た質問に似た他のアドバイスのいくつかに基づいてそれを書きました.

Python では、.readlines() 関数のクイック正規表現ソートを実装し、変数をすばやく割り当てることができました。CPP ではそれほど簡単ではないことがわかっているので、次のようにします。

#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    if (argv > 1) 
    {
        std::ifstream s(argv[1]);
        if (s.is_open())
            ; // compiler complained unless this was on its own line
        {
            int i, j, k; // assign ints, no idea why
            s >> i >> j >> k; // 
            std::cout << i << endl;
            std::cout << j << endl;
            std::cout << k << endl;

            // repeat the same with chars, try to assign from file reads?

        }
    }
}

私のテキストファイルには次のものがあります。

5
3
1

プログラムからの出力が「5 \n 3 \n 1」になることを期待しています

これは起こっていません。私が最終的にやろうとしているのは、「トラック500」のようなターゲット行を持ち、「トラック」を探しますが、intトラック変数を「500」に割り当てます

私の質問がいたるところにある場合は申し訳ありませんが、正しい方向へのヘルプや参照も歓迎します。ありがとう!

4

1 に答える 1

3

まず、-statement の後のセミコロンは、if-statement の完全な条件付きブロックですif(前の行に移動することは絶対にできますが、そもそもセミコロンを使用したくない場合はほぼ確実です)。さらに、読んだ後は常に入力内容を確認する必要があります。ストリームは、ユーザーが次に何を試みようとしているのかを認識しておらず、実際に試行する前に成功するかどうかを予測できません。つまり、コードは次のようになります。

std::ifstream in(argv[1]);
if (!in) {
    std::cout << "ERROR: failed to open '" << argv[1] << "' for reading\n";
}
else {
    int i, j, k;
    if (std::cin >> i >> j >> k) {
        std::cout << "read i=" << i << " j=" << j << " k=" << k << '\n';
    }
    else {
        std::cout << "ERROR: there was a format error\n";
    }
}

つまり、コードに基づいて、実際にファイルを正しく開くことができたと仮定すると、期待される出力が表示されるはずです。上記のコードは、何が問題なのかを指摘していると思います。

于 2013-10-06T20:09:59.967 に答える