2012-05-01 24 views
2

文字列に20個の名前を含むテキストファイルを読み込み、各文字列を画面に表示しようとしています。C++はテキストファイルを配列に読み込みます

string monsters[20]; 
ifstream inData; 
inData.open("names.txt"); 
for (int i=0;i<monsters->size();i++){ 
    inData >> monsters[i]; 
    cout << monsters[i] << endl; 
}inData.close(); 

ただし、このコードを実行するとループが実行されますが、配列には何も読み込まれません。どこが間違っていたのですか?

+0

ファイル内の20の名前はどのように区切られていますか?改行、スペース、またはカスタム区切り文字? – Evert

+0

コンパイルしてプログラムの残りの部分がうまく動作します。ごめんなさい、名前が新しい行で区切られていることを忘れてしまいました。 – pjmil

+0

私はC++についてよく分かりませんが、loop anc checkの中にブレークポイントを置くようにお願いします。私は "monsters-> size()"と思っています。 –

答えて

6

あなたのループ終了条件については間違っている:それは、最初のインデックスに位置しているので

i < monsters->size() 

は、これは実際には、あなたの配列の最初の文字列に)(サイズを呼び出します。 (モンスターはモンスター[0]に相当します)。これはデフォルトでは空ですので0を返し、ループは決して実行されません。

C++には配列のsize()演算子がないことに注意してください。代わりに、終了条件として定数20を使用する必要があります。実行時に0である

i < 20 
+1

定数20は 'const uint8_t numberOfMonsters = 20;'のように宣言してください。 –

+0

これを適用しましたが、まだファイルから何も読み込んでいません。 改行ごとに何かを追加する必要がありますか? – pjmil

+0

@ pjmil116、ファイルは間違いなく開いていますか?読み込みは成功していますか? – hmjd

2

monsters->size()です。その行をfor (int i=0;i<20;i++)に変更します。

string monsters[20]; 
    ifstream inData; 
    inData.open("names.txt"); 
    for (int i=0;i<20;i++){ 
     inData >> monsters[i]; 
     cout << monsters[i] << endl; 
    }inData.close(); 
関連する問題