0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 36
1

Неправильное удаление строки из файла

01.12.2014, 23:40. Показов 786. Ответов 2
Метки нет (Все метки)

Здраствуйте! Относительно недавно изучаю C++, и знакомлюсь с работой с файлами. Решил сделать приложение консольное. Ну фильмы, которые хотел бы посмотреть вбиваешь, а потом рандомом тебе выкидывает один из твоего списка. Все работает корректно более-менее, кроме удаления. При удалении строки (перезапись в файл без той, что не нужна), в новом файле остается последняя, но уже пустая строка. Как избавиться от этого? Помогите пожалуйста.

Вот код:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <fstream>
#include <ctime>
#include "windows.h"
 
 
using namespace std;
 
void add();
void del();
void random();
void add(){
     char film[100];
     system("cls");
     cout << "\nВведите название добавляемого фильма: ";
     cin.ignore( 1, '\n' );
     cin.getline(film, 99);
     ofstream F("random.txt", ios::app);
     F << film << endl;
     F.close();
     }
 
void del(){
     char film[100], list[100];
     system("cls");
     cout << "\nВведите название удаляемого фильма: ";
     cin.ignore( 1, '\n' );
     cin.getline(film, 99);
              ifstream F("random.txt");
              ofstream G("random1.txt", ios::app);
              while(F){
                       F.getline(list, sizeof(F));
                       if(strcmp(list, film) != 0) {G << list; G << endl;}
                      }    
              G.close();
              F.close();
              remove("random.txt");
              rename("random1.txt", "random.txt");
              }
     
void list(){
     char list[100];
     int choice;
     do{
     system("cls");
     ifstream F("random.txt");
     while(F){
              F.getline(list, sizeof(F));
              cout << list << endl;
              }
     F.close();
     cout << "\n\n\n1. Добавить фильм: \n\n";
     cout << "2. Удалить фильм: \n\n";
     cout << "\n\n0. Назад\n\n";
     cout << "Ваш выбор: ";
     cin >> choice;
     switch(choice){
                    case 1: {add(); break;}
                    case 2: {del(); break;}
                 }
     }while(choice!=0);
     }
 
void menu(){
     int choice = 0;
     do{
     system("cls");
     cout << "\n1. Случайный фильм\n\n";
     cout << "2. Список фильмов\n\n";
     cout << "\n\n0. Выход\n\n";
     cout << "Ваш выбор: ";
     cin >> choice;
     switch(choice){
               case 1: {random(); break;}
               case 2: {list(); break;}
               }
               }while(choice!=0);
     }
 
void random(){
     
     int k = 0;
     char str[100], str2[100];
     system("cls");
     ifstream F("random.txt");
     while(!F.eof()){
              F.getline(str, sizeof(F));
              k++;
              }
     srand(time(0));
     int r = 1 + rand() % k;
     k = 0;
     F.close();
     ifstream G("random.txt");
     while(!G.eof()){
     G.getline(str2, sizeof(F));
     k++;
     if(k == r) {cout << str2; break;}
     }
     G.close();
     system("pause>>void");
     }
 
int main(){
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    menu();
    system("pause>>void");  
    return 0;
}
Функция для удаления:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void del(){
     char film[100], list[100];
     system("cls");
     cout << "\nÂâåäèòå íàçâàíèå óäàëÿåìîãî ôèëüìà: ";
     cin.ignore( 1, '\n' );
     cin.getline(film, 99);
              ifstream F("random.txt");
              ofstream G("random1.txt", ios::app);
              while(F){
                       F.getline(list, sizeof(F));
                       if(strcmp(list, film) != 0) {G << list; G << endl;}
                      }    
              G.close();
              F.close();
              remove("random.txt");
              rename("random1.txt", "random.txt");
              }
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2014, 23:40
Ответы с готовыми решениями:

Удаление строки из файла\либо удаление самого файла.
День добрый, вот функция(используемые переменные объявленны ранее): void delete_cruise() { FILE...

Удаление строки из файла, добавление строки в конец файла
Подскажите : Как удалить строку в txt файле в которой имеется слово &quot;Zebra&quot;. А так же как...

Удаление строки из файла
Удаляю строку из текстового файла string file_name =&quot;citate.txt&quot;; ...

Удаление строки из файла
Нужна помощь в написании фрагмента кода в котором считывается файл и нужно удалить определенную...

2
7275 / 6220 / 2833
Регистрация: 14.04.2014
Сообщений: 26,871
02.12.2014, 09:26 2
Проверку поставь, чтобы не выводить endl с последней строкой.
1
0 / 0 / 0
Регистрация: 16.05.2012
Сообщений: 36
07.12.2014, 22:51  [ТС] 3
Спасибо, понял ошибку=)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2014, 22:51
Помогаю со студенческими работами здесь

Удаление строки из файла
Добрый день, возник вопрос возможно ли удалить/изменить в файле слово/строку, не перезаписывая при...

Удаление строки из файла
Здравствуйте уважаемые. Подскажите пожалуйста, как из текстового файла удалить строку определённой...

Удаление строки из файла
Добрый вечер! У меня есть структура, в которой есть данные номер(порядковый), фамилия и телефон....

Удаление строки из файла
помогите пожалуйсто дан текстовый файл. Удалить из него последнюю строку.


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru