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'' tellg() 'の戻り値は、位置ではなく失敗を示します。あなたは 'writeText2Vec()'の呼び出しコードを投稿できますか? – hmjd
代わりに 'reader.seekg(0、std :: ios :: beg)'を試してください。 –
はios :: begを試しましたが、結果は変更されませんでした。 tmatrix テーブル(rowSize、columnSize); \t \t //マトリックステーブルの作成。 \t \t writeText2Vec(reader、table); \t \t //マトリックスにtxtファイルを書き込みます。 – Yagiz