2012-04-10 11 views
0

EDIT - 空白行はありません。 EDIT 2 - 私の悪い、私は間違っていたようだ。どこかに空白の行がありますが、csvファイルには別の意味があります。それは今働いている。C++を使用しているため、「文字列サブスクリプトが範囲外にあります」というエラーメッセージが表示されるのはなぜですか?または少なくともそれはそのように思われる

#include <iostream> 
#include <cctype> 
#include <string> 
#include <fstream> 
using namespace std; 

int main(){ 
    char a; 
    string stringmanip; 

    fstream myfile("readthisfile.csv"); 
    if (myfile.is_open()){ 
     while (myfile.good()){ 
      getline(myfile,stringmanip); 
      a=stringmanip[0]; 
     } 
     myfile.close(); 
    } 
    else cout<< "Unable to open file"; 

    return 0; 
} 

それは私には意味をなさない: わかりましたので、ここでは全体(ショート)プログラムです。私はstringmanipをコピーすることができます、私はstringmanipをcoutすることができます、私はstringmanipと.substrを使用することができます。私は通常の文字列を定義する場合、[]操作をうまく使うことができます。私も試してみましたが、それは別のエラーにつながります。 (範囲外)。

助けがあれば幸いです。申し訳ありませんが私はあなたが言うことができると確信しているような初心者です。

おかげで、 ベン

+3

ファイルに空白行が含まれていますか?また、 'system(" pause ");'を[削除してください](http://www.gidnetwork.com/b-61.html)。 (私はあなたのコードをテストするためにコードを走らせていましたが、私のシステムでは、私の家の原子炉の冷却システムを止める「一時停止」というコマンドがあります。) –

+0

申し訳ありませんが、私はそれを取り除きました。いいえ、空白行は含まれていません。 – Ben

答えて

4

readthisfile.csvは、ファイルの最後に空行を持っている場合は、(または任意の場所にファイルに)、あなたは戻って、空の文字列を取得します。空文字列の0番目の文字を逆参照することはできません。 string::operator[]は、0string::length() - 1のインデックスのみを受け入れます。空の文字列がある場合、string::operator[]を呼び出すと、定義されていない動作になります。

+4

+1また、while(myfile.good())はwhile(getline(myfile、stringmanip))でなければなりません。 while(!stream.eof()) '/' while(stream.good()) 'の反パターン全体がすでにちょうど死んでしまうのではないかと思います。 – ildjarn

+0

母は、私がどのように新しいことを強調することはできません、申し訳ありません。 – Ben

関連する問題