2012-03-15 10 views
0

初心者はここですので、気をつけてください。私は運動として作成している単純なハングマンプログラムの単語のリストを使って少し苦労しています。私は、テキストファイルから単語のリストを読み取るために、このコードを使用しています:プログラムを実行するときに使用するためにファイルにベクトルを書き込むにはどうすればよいですか? (C++)

vector<string> getWords() 
{ 
    vector<string> text_file; 
    ifstream ifs("my_hangman_words.txt"); 
    string temp; 
    while(getline(ifs, temp)) 
    { 
    text_file.push_back(temp); 
    }; 
    return text_file; 
} 

私はコンパイルして直接実行したときにこれが正常に動作しますが、私は個別に実行可能ファイルを実行すると、それはしません。私が理解しているところでは、ベクトルをファイルに書き出し、プログラムでファイルを#includeする必要があります。誰かが私にそれを達成するための方法を教えてもらえますか?

+2

おそらく2つの異なるディレクトリから実行可能ファイルを実行しており、現在のディレクトリで "my_hangman_words.txt"のみを検索します。 – hmjd

+0

「コンパイルして直接実行する」と「実行可能ファイルを個別に実行する」とはどういう意味ですか? @ hmjdはおそらくファイルIOを常にエラーチェックするための正しい引数を持っています! – John3136

+0

ハードコーディングされたパスを使用するのはほとんど常に間違っています – user877329

答えて

1

#includeはリソースではなくコードを持ち込むためのものです。

絶対パスがないと(つまりc:/workingpath/file.txt)、コードを直接実行したときにコードが正しく読み取られない可能性があります。

デバッガで実行する場合、command argumentsworking path(Visual Studio用のリンク)を含む多くの追加パラメータを設定できます。これらはバイナリを直接実行するときは適用されません。

あなたが直接実行するときに何が起こるかにより具体的になる場合は、より多くのことを助けることができます。

+0

ありがとう:)確かにそうです。私はフルパスを試してみるとうまくいきます。しかし、これは確かにゲームの言葉のリストを含めるための正しいアプローチではありませんか?理想的には、プレイヤーが解決策を見ることができないように、実行可能ファイルにリストを隠す必要があります。そのため、私はベクトルにファイルを書き、#includeを使用します。少なくとも私はパスをハードコーディングするのではなく、実行可能ファイルと同じディレクトリにあるテキストファイルを指すことができるはずです。または私は何かを逃していますか?注:私はマックにいます。 – Dionysis

+0

ヘッダファイルに静的配列として格納することはできますが、リソースファイルを使用することをお勧めします。最悪の場合、プログラムに値をハードコーディングできますが、アプリケーション文字列を見れば簡単に値を取得できます。 :-) – Konrad

+0

しかし、リソースファイルは視覚的な基本的な特定のいいえですか?私はMacを使っているので、標準的なC++のためのエレガントなソリューションはありませんか? – Dionysis

関連する問題