2012-03-06 19 views
0

私はC++コンソールアプリケーションを作成しています。 size(int)rowSizeとcolumnSizeの行列を作成した後、テキストファイルの文字を行列に書きたいと思いましたが、読者の位置が-1なのでループは実行されず、0にはできませんでした。seekgとtellgの互換性がありません

void writeText2Vec(ifstream & reader, tmatrix<char> & table){ 
    string s; 
    int length, row = 0, column = 0; //beginning: column and 
            //row ids are set to 0. 
    reader.seekg(0); //reset the pointer to start 

    cout << reader.tellg(); // it results in -1. 
    while (getline(reader,s)){ 
     //for each line while loop occurs. 
     length = s.length(); 
     for(column = 0; column < length; column++) 
     { 
      table[row][column] = s.at(column); 
      //writing the letter to matrix. 
     } 
     row++; 
    } 

bool openFile(ifstream & reader, string filename){ 
    reader.open(filename.c_str()); 

    if (reader.fail()){ 
     exit("File cannot be found."); 
     return false; 
    } 
    else { 
     return true; 
    } 
} 

bool check(ifstream & reader, int & rowSize, int & columnSize){ 
    //checks for valid characters, if they are 
    //alphabetical or not and for the length. 

    string s; 
    int len = 0, max = 0; 
    while (getline(reader,s)){ 
     //runs for every line. 
     rowSize++; //calculation of row size 

     while (len < s.length()){ 
      if (!(isalpha(s.at(len)))){ 
       // Check to see if all characters are alphabetic. 
       exit("Matrix contains invalid characters!"); 
       return false; 
      } 
      len++; 
     } 
     if (max == 0){ 
      //if max is not set. 
      max = len; 
      len = 0; 
     } 
     else if (!(max == len)){ 
      //if they are different, then appropriate 
      //error message is returned. 
      exit("Matrix is not in a correct format!"); 
      return false; 
     } 
     else { 
      //else it resets. 
      len = 0; 
     } 
    } 
    rowSize -= 1; 
    columnSize = s.length(); //the last length is equal to column size 
    return true; 
} 
+1

'-1'' tellg() 'の戻り値は、位置ではなく失敗を示します。あなたは 'writeText2Vec()'の呼び出しコードを投稿できますか? – hmjd

+0

代わりに 'reader.seekg(0、std :: ios :: beg)'を試してください。 –

+0

はios :: begを試しましたが、結果は変更されませんでした。 tmatrix テーブル(rowSize、columnSize); \t \t //マトリックステーブルの作成。 \t \t writeText2Vec(reader、table); \t \t //マトリックスにtxtファイルを書き込みます。 – Yagiz

答えて

2

tellg()戻りエラーが発生した-1。ストリームは でした。おそらく関数を呼び出したときのエラー状態です。一度最後に を読んだ場合、失敗した入力があり、エラー状態のストリームは です。これは、他の操作が動作する前にクリアする必要があります:reader.clear()

+0

ありがとうございます、それは動作します – Yagiz

関連する問題