Получение файла g, образованного из f исключением повторных вхождений одного и того же числа - C (СИ)

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

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

В общем. Чего я пытаюсь добиться. Компоненты файла f – целые числа. Получить файл g, образованный из f исключением повторных вхождений одного и того же числа. На первый взгляд мне показалось, что я написал подходящий алгоритм и уже было обрадовался. Но заметил, что программа сверяет только соседние числа и при вводу 223, она перенесет 23, а при 232, перенесет 232. Пытался написать цикл при условии поиска до конца файла EOF. Но в итоге упираюсь в бесконечный цикл. Процесс ввода чисел у меня идет отдельной функцией.
int chtrfile()
{
    char text[200];
    FILE *f;
    f = fopen("readme.txt", "r+t");
    printf("Введите текст\n");
    getchar();
    fgets(text, 200, stdin);
    fputs(text, f);
    printf("Данные записаны в файл.\n");
    fclose(f);
    getchar();
    return 0;
}
int zam1()
{
    char t[200], a, b;
    int c = 1, s = 1;
    FILE *f, *g;
    f = fopen("readme.txt", "r");
    g = fopen("zad2.txt", "w+");
    fgets(t, 200, f);
    for (int i = 0; i < 200; i++)
    {
        c = 1;
        a = t[i];
        while (a != t[i+1] && c == 1)
        {
            fprintf(g, "%c", a);
            c = 0;
        }
    }
    fclose(f);
    fclose(g);
    return 0;
}
PS. Писать я еще только учусь =)

Решение задачи: «Получение файла g, образованного из f исключением повторных вхождений одного и того же числа»

textual
Листинг программы
//gcc 5.4.0
 
#include  <stdio.h>
 
int main(void)
{
    char buf[200];
    int digits[10] = {0};
  
    fgets(buf, 200, stdin);
    
    for (int i=0; buf[i]; ++i) 
    {
        if (digits[buf[i] - '0'] == 0) 
        {
            printf("%c", buf[i]);
            digits[buf[i] - '0'] = 1;
        }
    }
 
    return 0;
}

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

  1. Вводится строка с числами, разделёнными пробелами.
  2. В массиве digits инициализированы все элементы нулями.
  3. В цикле считывается каждый символ из введённой строки.
  4. Проверяется, что digit для текущего символа равен нулю.
  5. Если условие выполняется, то символ выводится на экран, а значение digit для этого символа устанавливается равным единице.
  6. Цикл продолжается до тех пор, пока не будут обработаны все символы из введённой строки.
  7. Программа завершается без ошибок.

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


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

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

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