Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 29.09.2011
Сообщений: 20
1

Чтение из файла пяти последних строк

12.07.2012, 21:04. Показов 1211. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!
Есть один модуль , который отвечает за ввод последних 5 результатов программы.
(печатает , последние 5 строчек файла)
Помогите разобраться.
язык Си
модуль
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//Запись последних результатов в в базу(файл)
void set_last_res(float val)
{
    FILE *fin = fopen("base", "a+");
    fprintf(fin, "%g\n", val);
    fclose(fin);
}
 
//Вывод последних результатов на экран
void show_last_res(void)
{
    FILE* fout = fopen("base", "a+");
    int i = 0;
     //а именно непонятно ниже.
    char base[50][20];
    while(!feof(fout))
    {
        if(!feof(fout))
          fscanf(fout, "%s", base[i++]);
    }
    i = i - 2;
    if(i >= 5)
    {
        for(int j = 4; j >= 0; --j)
            printf("%s\n", base[i--]);
    }
    else
    {
        while(i >= 0)
            printf("%s\n", base[i--]);
    }
    fclose(fout);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.07.2012, 21:04
Ответы с готовыми решениями:

Быстрое чтение последних 100 строк файла
Здравствуйте, Есть такая проблема: нужно быстро прочесть 100 последних строк CSV-файла. Дело в...

Чтение последних 100 строк из текстового файла
Нужно реализоваться сабж. Размеры файлов в пределах 40-100мб. Прога должна через указанный...

Найти суми первых пяти и последних пяти элементов и сравнить их
Найти суми первых пяти и последних пяти элементов и сравнить их.

Чтение последних 10 строк
Подскажите алгоритм вывода нескольких последних строк из большого файла (~1GB). Построчное чтение...

5
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
12.07.2012, 21:20 2
а в чем разобраться?
0
0 / 0 / 0
Регистрация: 29.09.2011
Сообщений: 20
12.07.2012, 21:27  [ТС] 3
rudeeeboy,
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  char base[50][20];  
    while(!feof(fout))
    {
        if(!feof(fout))
          fscanf(fout, "%s", base[i++]);
    }
    i = i - 2;
    if(i >= 5)
    {
        for(int j = 4; j >= 0; --j)
            printf("%s\n", base[i--]);
    }
    else
    {
        while(i >= 0)
            printf("%s\n", base[i--]);
    }
    fclose(fout);
}
конкретно в циклах , да и для чего массив?
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
12.07.2012, 21:37 4
считываешь символы с файла
C++
1
2
3
4
5
while(!feof(fout))
    {
        if(!feof(fout))
          fscanf(fout, "%s", base[i++]);
    }
выводишь в консоль
C++
1
2
3
4
5
6
7
8
9
10
if(i >= 5)
    {
        for(int j = 4; j >= 0; --j)
            printf("%s\n", base[i--]);
    }
    else
    {
        while(i >= 0)
            printf("%s\n", base[i--]);
    }
размер массива минус терминальный символ файла
C++
1
i = i - 2;
массив для считывания символов с файла
1
0 / 0 / 0
Регистрация: 29.09.2011
Сообщений: 20
12.07.2012, 21:49  [ТС] 5
C
1
2
3
4
5
  if(i >= 5)
    {
        for(int j = 4; j >= 0; --j)
            printf("%s\n", base[i--]);
    }
то есть , если больше 5 строк в файле , то он печатает последние 5
C
1
2
3
4
5
  else
    {
        while(i >= 0)
            printf("%s\n", base[i--]);
    }
просто печатает последние строки (если их <=5)

C
1
2
3
4
5
 while(!feof(fout))
    {
        if(!feof(fout))
          fscanf(fout, "%s", base[i++]);
    }
открывается файл , находится его конец
я правильно понимаю?
0
14 / 14 / 4
Регистрация: 08.11.2010
Сообщений: 172
12.07.2012, 22:56 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
if(i >= 5)
    {
        for(int j = 4; j >= 0; --j)
            printf("%s\n", base[i--]);
    }
    else
    {
        while(i >= 0)
            printf("%s\n", base[i--]);
    }
в этом фрагменте я смысл не понимаю, можно вроде заменит на
C++
1
2
while(i >= 0)
       printf("%s\n", base[i--]);
и не по строкам, а по символам вроде, я вообще не пойму зачем тут j
1
12.07.2012, 22:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.07.2012, 22:56
Помогаю со студенческими работами здесь

В файле найти произведение последних пяти элементов. Полученным значением заменить каждую вторую компоненту файла
В файле F1 найти произведение последних пяти элементов. Полученным значением заменить каждую вторую...

Вывести N последних строк из файла
size = 0 size (x:xs) = if (x=='\n') then (size xs)+1 else (size xs)+0 read2::IO String...

Распечатайте 15 последних строк текстового файла.
Дан большой текстовый файл с длиной строк не более 100 символов. Распечатайте 15 последних строк...

Функция,которая считывает из файла только n последних строк
Привет! Подскажите как прописать функцию, перед этим уже прописала потоковое чтение из файла и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru