1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. Ryuujin

    Ryuujin Member

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

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

    Ryuujin Member

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

    ierofant Гость

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

    Ryuujin Member

    Репутация:
    0
    Регистрация:
    24 дек 2010
    Сообщения:
    5
    Симпатии:
    0
    Выдаёт ошибку:
    Код:
    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 Гость

    Репутация:
    0
    Ryuujin

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

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

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

    Программа:

    Код:
    #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 Гость

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

    ierofant Гость

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

    Ryuujin Member

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

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