Я пытаюсь прочитать плохо отформатированный текстовый файл, и, возможно, я поступаю об этом неправильно, но на основании документации по getline это звучало так, как будто бы он извлекал значения до тех пор, пока значения не станут значением разделителя (' ', в моем случае):
"Если разделитель найден, он извлекается и отбрасывается, т.е.
не сохраняется, и следующая операция ввода начнется после нее. если ты
не хотите, чтобы этот символ был извлечен, вы можете использовать член получить
вместо этого. "
Но почему-то он много раз ничего не возвращает. Смотрите строки 604-607, все эти запятые в моем выводе являются возвращениями getline. Может ли кто-нибудь сказать мне, почему он возвращает пробелы 6 раз, прежде чем доходит до значения? Текстовый файл содержит только один пробел перед значением. Заранее спасибо. :)
Соответствующий скриншот: http://j.drhu.me/2011-09-07_1317.png
#include <iostream>
#include <fstream>
#include <string>
void CMuscleModel::LoadOpParams()
{
int i, j;
ifstream param("params.txt", ios::in);
if (param.is_open())
{
stringstream iss, isn;
string line, word;
i=0; j=0;
while (getline(param,line))
{
isn.clear();
isn << line;
if(i>27){
while (getline(isn,word,' ')) {
//LGma[i][j]=atof(word.c_str());
if(word == "SM"){
getline(param,line);
cout << line << endl << endl;
isn.clear(); isn << line;
getline(isn,word,' ');
int junk=0;
while (atof(word.c_str())==0){
junk++;
getline(isn,word,' ');
}
cout << atof(word.c_str()) << ", " << junk << endl;
}
if(word == "ST"){
cout << word << endl;
}
if(word == "BFL"){
cout << word << endl;
}
if(word == "BFS"){
cout << word << endl;
}
if(word == "MG"){
cout << word << endl;
}
if(word == "LG"){
cout << word << endl;
}
if(word == "RF"){
cout << word << endl;
}
if(word == "VM"){
cout << word << endl;
}
if(word == "VL"){
cout << word << endl;
}
if(word == "VI"){
cout << word << endl;
}
j++;
}
}
j=0; i++;
isn.clear();
}
}
param.close();
}
Ах, простите, что не включили код.