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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Ryuujin, 24 дек 2010.

  1. Ryuujin

    Ryuujin Member

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

    ifstream fin("diag_data.txt");

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

    ierofant Гость

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

    Ryuujin Member

    Регистрация:
    24 дек 2010
    Сообщения:
    5
    Симпатии:
    0
    даже если заменить на
    Код (C++):
    while (!fin.eof())
    { fin >> fnum;
    vdat.push_back(fnum);
    }
    эффект останется тот же
     
  4. ierofant

    ierofant Гость

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

    Ryuujin Member

    Регистрация:
    24 дек 2010
    Сообщения:
    5
    Симпатии:
    0
    Выдаёт ошибку:
    Код (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>]
    Я так понимаю, что оно пытается символы считывать?
     
  6. Rififi

    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

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

    ierofant Гость

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

    ierofant Гость

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

    Ryuujin Member

    Регистрация:
    24 дек 2010
    Сообщения:
    5
    Симпатии:
    0
    А каким способом тогда можно считать числа именно из текстового файла? Может считывать непробельные блоки и преобразовывать строку в число?
     
Загрузка...
Похожие Темы - Впадение бесконечный цикл
  1. vital
    Ответов:
    4
    Просмотров:
    3.061

Поделиться этой страницей