1HAWK1
@1HAWK1

Код не успевает выполниться.С++.Что делать?

int main()
{
    string text;
    srand(time(NULL));                        //рандом
    rand();
    int n = 29999;                             //0-29999
    int randomQuestion = rand() % (n + 1);

    ifstream file("1.txt");//путь к файлу
    char open_file[400];
    int index = -1;
    do
    {
        index++;
        if (index == randomQuestion) text = open_file; //Проверка номера строки
        file.getline(open_file, 400);//считывает одну строку файла
    } while (!file.eof());
    cout << text;
}
Код должен вытягивать 1 строку из более 30тыс. строк. Код это не выводит. Когда делаю с базой в 1000, всё работает. Задержки ставил, не помогло. Что делать?
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Можно ускорить, если вместо чтения построчно читать по несколько килобайт (ifstream::read) и считать количество символов перевода строки, пока не отсчитаете нужное количество. Потом от нужного символа перевода строки поискать, есть ли там следующий перевод строки или конец файла уже в буфере. Если есть - вот и ваша строка уже в памяти. Иначе берете все до конца буфера и приписываете к этому из файла новую строку.

Можно поиск символов перевода строки ускорить всякими SIMD инструкциями.

Но вообще, у вас файл маленький, не должно быть проблем со скоростью.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 210 000 до 250 000 ₽
БАРС Груп Москва
от 180 000 до 260 000 ₽
uKit Group Ростов-на-Дону
от 60 000 до 100 000 ₽
18 мая 2021, в 01:31
3000 руб./за проект
17 мая 2021, в 23:39
50000 руб./за проект
17 мая 2021, в 23:10
100000 руб./за проект