Поменять местами последнюю и первую строку файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача - поменять местами последнюю и первую строку, вот начало кода:
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct book {int n; char autor [30]; char name [50];char date [25];} B;
void swap (FILE*); //поменять 1 и последнюю строки местами
void main()
...
void swap (FILE *tf)
{
 struct book1 {int n; char autor [30]; char name [50];char date [25];} B1;
 long int i;
 tf=fopen ("file1.dat","rb+");//открытие бинарного файла для чтения и записи
 clrscr();
 i=sizeof(B);
 fread(&B,sizeof(B),1,tf);//чтение из файла первой стуктуры В
 B1.n=B.n;
 strcpy(B1.autor,B.autor);
 strcpy(B1.name,B.name);
 strcpy(B1.date,B.date);   // копирование структуры В в структуру В1
Здесь все работает, потом я хочу перейти в конец файла, прочитать последнюю структуру и записать ее в первую строку, но почему то команда
fseek(tf,i,2);     //переход в конец файла
не перемещает в конец файла курсор и последующая команда показывает, что в буфер попала опять первая строка:
 fread(&B,sizeof(B),1,tf);//чтение из файла последней стуктуры В
 fseek(tf,-i,0); //переход в начало файла
 fwrite (&B,sizeof(B), 1, tf);//запись в первую строку файла последней структуры В
 fseek(tf,--i,2);  //переход в конец файла
 fwrite (&B1,sizeof(B1), 1, tf);//запись вместо последней строки первой
 fclose(tf);
 printf("\n В файле поменялись местами первая и последняя строки: \n");
 scan (tf);
}
Подскажите, почему не перемещается курсор?

Решение задачи: «Поменять местами последнюю и первую строку файла»

textual
Листинг программы
#include <stdio.h>
 
typedef struct BOOK {
    char *name;
} book;
 
int main(){
    FILE *fp;
    char *fname = "sometxt";
    book nbook;
    nbook.name = "Some sucker";
    
    
    if (NULL!=(fp=fopen(fname, "rb+"))){
        fseek(fp, 0, SEEK_END);
        fwrite(&nbook, sizeof(book), 1,  fp);
        fclose(fp);
    }
    else {
        printf("error open file %s\n", fname);
    }
    return 0;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами
  2. Объявление структуры book с полями name типа char*
  3. Инициализация указателя fname для имени файла
  4. Инициализация структуры nbook с именем книги
  5. Открытие файла fp для чтения и записи в режиме добавления rb+
  6. Переход в конец файла с помощью функции fseek
  7. Запись структуры nbook в файл с помощью функции fwrite
  8. Закрытие файла с помощью функции fclose
  9. Обработка ошибки открытия файла с помощью условного оператора if и вывода сообщения об ошибке
  10. Возврат значения 0 для успешного выполнения программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы