Witam,
mam ogromną prośbę o wyjaśnienie dlaczego poniższy kod wydobywa tylko 1 zmienną z pliku a później są błędy? Chodzi o wydobycie 3 zmiennych w pierwszym wierszu pliku oddzielonych znakiem
';'
ifstream file;
file.open(filename);
string line;
int int_val;
double double_val;
string cell;
istringstream lineS;
istringstream cellData;
getline(file, line);
lineS.str(line);
getline(lineS, cell, ';');
cellData.str(cell);
if(cellData >> int_val)
{
zmienna1 = int_val;
if(!(cellData >> ws).eof())
cerr << " coś poszło nie tak 1" << endl;
}
else
cerr << " error 1" << endl;
getline(lineS, cell, ';');
cellData.str(cell);
if(cellData >> int_val)
{
zmienna2 = int_val;
if(!(cellData >> ws).eof())
cerr << " coś poszło nie tak 2" << endl;
}
else
cerr << " error 2" << endl;
getline(lineS, cell, ';');
cellData.str(cell);
if(cellData >> int_val)
{
zmienna3 = int_val;
if(!(cellData >> ws).eof())
cerr << " coś poszło nie tak 3" << endl;
}
else
cerr << " error 3" << endl;
Natomiast, gdy wykonam ten kod w taki oto sposób:
getline(file, line);
lineS.str(line);
vector<int> rowData;
while(getline(lineS, cell, ';'))
{
istringstream cellData(cell);
int value;
if(cellData >> value)
{
rowData.push_back(value);
if(!(cellData >> ws).eof())
cerr << "Problem in column: " << rowData.size() << " cell contains extra value: " << cell << endl;
}
else
{
rowData.push_back(100.0);
cerr << "Problem in column: " << rowData.size() << " cell contains none numerical value: " << cell << endl;
}
}
for(int i = 0; i < rowData.size(); i++)
cout << "rowData["<< i << "] => " << rowData[i] << endl;
To wszystko działa prawidłowo...
Więc mam pytanie czym się różni jeden kod od drugiego, poza tym, że jeden wydobywa dane pojedynczo (przynajmniej taki jest zamiar) a drugi wykorzystuje pętlę while do wydobywania i zapisywania danych z wiersza...
Z góry dziękuję za pomoc!