Впадение в бесконечный цикл

24.12.2010
5
0
#1
Есть небольшая процедура для считывания вещественных чисел из текстового файла и помещения оных в вектор.
C++:
vector<float> FindNum()
{  float fnum;
vector <float> vdat;

ifstream fin("diag_data.txt");

while (fin >> fnum)
{  vdat.push_back(fnum);
}
return vdat;
}
Собственно при считывании она и впадает в бесконечный цикл.
Буду очень благодарен за разъяснение почему так и как от этого избавиться.
 
I

ierofant

Гость
#2
Потому что у вас условие в цикле while не пойми какое, он будет бесконечно выполнятся.
 
24.12.2010
5
0
#3
даже если заменить на
C++:
while (!fin.eof())
{ fin >> fnum;
vdat.push_back(fnum);
}
эффект останется тот же
 
I

ierofant

Гость
#4
Оператор >> для файлового потока не годится.
Используйте
C++:
 fin.read ((float*) &fnum, sizeof fnum);
А в конце не забывайте закрывать поток:
C++:
fin.close ();
 
24.12.2010
5
0
#5
Выдаёт ошибку:
C++:
In function `std::vector<float, std::allocator<float> > FindNum()': 
no matching function for call to `std::basic_ifstream<char, std::char_traits<char> >::read(float*, unsigned int)' 
candidates are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::read(_CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]
Я так понимаю, что оно пытается символы считывать?
 
R

Rififi

Гость
#6
Ryuujin

Собственно при считывании она и впадает в бесконечный цикл.

Впадают в спячку или маразм, а в бесконечный цикл - входят :facepalm:

Делаем простую проверку

Программа:

C++:
#include <locale>
#include <iostream>
#include <fstream>

int main()
{
setlocale(LC_ALL, "");

std::ifstream ifs("floats.txt");

float f;

while (ifs >> f)
std::cout << f << std::endl;

return 0;
}
Содержимое файла floats.txt

1.0
12.1
123.4
123.456

Результат работы программы:

1
12.1
123.4
123.456

Вывод: используемый тобой компилятор - в помойку. и взять нормальный.
 
I

ierofant

Гость
#7
Я не так написал:
C++:
 fin.read ((char*) &fnum, sizeof fnum);
 
I

ierofant

Гость
#8
Да и вообще у тебя текстовый файл, а я написал пример для бинарного. Так что тебе это вряд ли подойдёт.
 
24.12.2010
5
0
#9
А каким способом тогда можно считать числа именно из текстового файла? Может считывать непробельные блоки и преобразовывать строку в число?