Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2022, 21:45   #1
DianaPau
Новичок
Джуниор
 
Регистрация: 23.11.2022
Сообщений: 3
По умолчанию Как удалить из файла элемент кратный 5

Есть файл, с числами, необходимо удалить элементы кратные 5 (без дополнительного массива), и чтобы в новом файле элементы сохранили свое положение как в первом. Не получается удалить, помогите
Код:
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>

int main()
{
    setlocale(LC_CTYPE, "Russian");
    system("cls");
    FILE *file1, *file2;
    int val, tmp;
    file1=fopen("C:\\f1.txt", "rb");
    file2=fopen("C:\\f2.txt", "wb");
    if (file1 == NULL)
    {
        fclose(file1);
        return 1;
    }
    if (file2 == NULL)
    {
        fclose(file2);
        return 1;
    }
    while(fscanf(file1, "%d", &val)==1)
    {
        tmp=val;
        if(tmp%5==0)
            {
                fprintf(file2, "%d ", tmp);
            }
    }
    fclose(file1);
    fclose(file2);
    return 0;
}

Последний раз редактировалось DianaPau; 23.11.2022 в 22:02.
DianaPau вне форума Ответить с цитированием
Старый 23.11.2022, 23:05   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

1. зачем пихать fclose NULL?
2. почему при ошибке открытия второго файла, вы первый не закрываете?
3. вам же надо удалить кратные, а вы их печатает
p51x вне форума Ответить с цитированием
Старый 23.11.2022, 23:12   #3
DianaPau
Новичок
Джуниор
 
Регистрация: 23.11.2022
Сообщений: 3
По умолчанию

p51x,
Цитата:
Сообщение от p51x Посмотреть сообщение
вам же надо удалить кратные, а вы их печатает
Не знаю как можно это сделать, поэтому и спрашиваю, как реализовать

Последний раз редактировалось DianaPau; 23.11.2022 в 23:14.
DianaPau вне форума Ответить с цитированием
Старый 24.11.2022, 00:18   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от DianaPau Посмотреть сообщение
Код:
if (file1 == NULL)
    {
        fclose(file1);
        return 1;
    }
    if (file2 == NULL)
    {
        fclose(file2);
        return 1;
    }
Если file1 или file2 уже равны NULL, тогда fclose этого дескриптора не нужен. А вот если file2 == NULL, тогда надо закрыть file1 т.к. предыдущая проверка не прошла, а значит file1 != NULL и он открыт.
Цитата:
Сообщение от DianaPau Посмотреть сообщение
Код:
while(fscanf(file1, "%d", &val)==1)
    {
        tmp=val;
        if(tmp%5==0)
            {
                fprintf(file2, "%d ", tmp);
            }
    }
Для работы с бинарными файлами надо использовать функции fread и fwrite вместо fscanf и fprintf. В условии if вы написали, что надо оставить только элементы кратные 5. Если надо их исключить, тогда используйте tmp%5 != 0.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удалить минимальй элемент dastreba C/C++ Базы данных 3 30.05.2018 13:46
Найти первый отрицательный элемент массива, кратный заданному числу, сменить у него знак и поставить в начало массива. Fallen199 Помощь студентам 1 15.06.2017 08:47
Найти первый отрицательный элемент массива, кратный заданному числу, сменить у него знак и поставить в конец массива. Fallen199 Паскаль, Turbo Pascal, PascalABC.NET 1 15.06.2017 08:03
Удалить элемент массива viks1 Общие вопросы Delphi 5 02.04.2013 13:35
В матрице, удалить столбец, элемент которого, кратный 5 SeregaTihonov Общие вопросы C/C++ 5 26.03.2011 14:01