Поменять местами последнюю и первую строку файла - 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; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами
- Объявление структуры
book
с полямиname
типаchar*
- Инициализация указателя
fname
для имени файла - Инициализация структуры
nbook
с именем книги - Открытие файла
fp
для чтения и записи в режиме добавленияrb+
- Переход в конец файла с помощью функции
fseek
- Запись структуры
nbook
в файл с помощью функцииfwrite
- Закрытие файла с помощью функции
fclose
- Обработка ошибки открытия файла с помощью условного оператора
if
и вывода сообщения об ошибке - Возврат значения 0 для успешного выполнения программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д