Форум программистов, компьютерный форум CyberForum.ru

Функция удаления строки из файла - C++

Восстановить пароль Регистрация
 
nsh12
0 / 0 / 0
Регистрация: 14.05.2014
Сообщений: 6
28.05.2014, 10:02     Функция удаления строки из файла #1
Мной написана такая функция. В ней две проблемы:
1) после поиска выводится не найденное, а все, что записано
2) после удаления строки появляется строка нулей (в конце нового файла).
как это решить?
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
void remove (){ //удаление
    struct recipe *list;
    int k=0; int n=0; char c; int i;
    FILE  *fa;
    fa=fopen("list.txt", "r");
    if (!fa){
        printf("невозможно открыть файл\n");
        exit(1);
    }   
    while (!feof(fa)){   
        if ((c=fgetc(fa))=='\n' || c==EOF){ //подсчет количества строк для последующего выделения памяти
            n++;
        } 
    }
    fseek (fa,0,SEEK_SET);//указатель в начало 
    list=new recipe [n*sizeof(recipe)];     
    while (!feof(fa)){
        fscanf(fa, "%s%s%d%d%d", &list[k].name,&list[k].mode, &list[k].price, &list[k].ccal, &list[k].time);
        k++;
    }
    fclose(fa);
    int m=0; int l=0; char *a;
    char s1[10];
    for (i=0; i<n; i++) {
        printf("%s %s %dруб %dккал %dмин\n", list[i].name, list[i].mode, list[i].price, list[i].ccal, list[i].time);
    }
    printf("введите имя\n");
    scanf("%s", &s1);
    for (i=0; i<k; i++){
        a=strtok(list[i].name, "_");//берем первую (главную) часть названия
        m=strspn(s1, a);// считаем количество совпадений
        a="\0";
        if (m>=5){
            for (i=0;i<n;i++){
                printf("%d. ", i);
                printf("%s\n", list[i].name);
            }       
            FILE *f2;
            f2=fopen("list1.txt", "w");             
            printf("введите номер ненужного блюда\n");
            scanf("%d",&l);
            for (i=0; i<n; i++){
            if (i!=l){       
                    if(i==0){
                        fprintf(f2, "%s %s %d %d %d", list[i].name,list[i].mode, list[i].price, list[i].ccal, list[i].time);
                    }
                    if (i!=0){                  
                        fprintf(f2, "\n%s %s %d %d %d", list[i].name,list[i].mode, list[i].price, list[i].ccal, list[i].time);
                    }
                }
            }   
            printf("запись успешно удалена\n");
            fclose(f2);
            remove("list.txt");
            rename("list1.txt","list.txt");
        }
    }
    
        if (m<5) {
        printf("не найдено\n");}
    delete [] list;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2014, 10:02     Функция удаления строки из файла
Посмотрите здесь:

функция в си++ для удаления элемента C++
Функция удаления на С C++
Функция для удаления слова из строки C++
C++ функция getline считывает несколько строк из файла, игнорируя символ новой строки
C++ Функция удаления подстроки из строки
Не выполняется функция удаления C++
Функция удаления из списка C++
C++ Функция удаления из строки n-символов, начиная с q-го

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 07:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru