• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Ryuujin
  • Дата начала
R

Ryuujin

Есть небольшая процедура для считывания вещественных чисел из текстового файла и помещения оных в вектор.
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

Потому что у вас условие в цикле while не пойми какое, он будет бесконечно выполнятся.
 
R

Ryuujin

даже если заменить на
C++:
while (!fin.eof())
{ fin >> fnum;
vdat.push_back(fnum);
}
эффект останется тот же
 
I

ierofant

Оператор >> для файлового потока не годится.
Используйте
C++:
 fin.read ((float*) &fnum, sizeof fnum);
А в конце не забывайте закрывать поток:
C++:
fin.close ();
 
R

Ryuujin

Выдаёт ошибку:
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

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

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

ierofant

Да и вообще у тебя текстовый файл, а я написал пример для бинарного. Так что тебе это вряд ли подойдёт.
 
R

Ryuujin

А каким способом тогда можно считать числа именно из текстового файла? Может считывать непробельные блоки и преобразовывать строку в число?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!