Кодировка текста путем сдвига символов - C (СИ)

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

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

#include <stdio.h>
char code(char *c, int n)
{
    int i;
    for (i=0; c[i]!=0; i++)
    {
        c[i]=c[i]+n;
        if (c[i]>'z')   c[i]=c[i]-'z'+'a'-1;
        if (c[i]<'a')   c[i]=c[i]+'z'-'a'+1;
    }
}
int main()
{
    FILE *f=fopen("a.txt","r"), *g=fopen("b.txt","w");
    int n=10;
    char c;
    while (!feof)
    {
        c=getc(f);
        if (c>='a' && c<='z')
            putc(code(c,n),g);
    }
    fclose(f);
    fclose(g);
}
Вот прога, которая читает из файла, кодирует и вставляет в другой файл. кодирует так (например, abc сдвинем на 2 получим cde). НО она не работает, помогите найти ошибку. P.s. я понимаю, что вы офигенные прогеры и это для вас херня, но мне нужен именно такой код, но без ошибки, очень благодарю за понимание.

Решение задачи: «Кодировка текста путем сдвига символов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>// exit()
char code1(char c, int n)
{
    // int i; //warning C4101: 'i' : unreferenced local variable
        c=c+n; //c+=n;
        if (c>'Z')  c -= ('Z'-'A'+1);
        else if (c>'Z')  c += ('Z'-'A'+1);// Z-A+1 == z-a+1 величина постоянная...
        return c; // добавил
        // для изменения операнда надо делать void code() и вызвать code(&c,n)
}
char code(char c, int n)
{
        c=c+n;
        if (c>'z')  c -= ('z'-'a'+1);
        else if (c<'a')  c += ('Z'-'A'+1);
        return c;
}
int main(void)
{
    int n=-2;
    char c; // int fgetc(FILE *stream);//int fputc(int ch, FILE *stream);
 
    FILE *f=fopen("a.txt","r"), *g=fopen("b.txt","w");
    
    if (f==NULL || g == NULL) {
        printf("He удается открыть файл. (%x %x)\n", f, g);
        exit(1);
    }
    printf("файл.\n");
    while ((c=fgetc(f)) !=EOF)
    {
        if (c>='a' && c<='z')   fputc(code(c,n), g);
        else if (c>='A' && c<='Z')   fputc(code1(c,n), g);
        else fputc(c, g);
    }
    fclose(f);
    fclose(g);
}

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

  1. В функции code1 сдвиг символов осуществляется путем добавления значения переменной n к символу c.
  2. Если сдвиг приводит символ c за пределы диапазона от 'A' до 'Z', то происходит обратный сдвиг на величину ('Z'-'A'+1).
  3. В функции code сдвиг символов также осуществляется путем добавления значения переменной n к символу c.
  4. Если сдвиг приводит символ c за пределы диапазона от 'a' до 'z', то происходит обратный сдвиг на величину ('z'-'a'+1).
  5. В функции main открываются два файла - f для чтения и g для записи.
  6. В цикле пока не достигнут конец файла, каждый символ из файла f проверяется на принадлежность к диапазону от 'a' до 'z' или от 'A' до 'Z'.
  7. Если символ принадлежит к диапазону от 'a' до 'z', то он сдвигается с помощью функции code, а затем записывается в файл g.
  8. Если символ принадлежит к диапазону от 'A' до 'Z', то он сдвигается с помощью функции code1, а затем записывается в файл g.
  9. Если символ не принадлежит ни к одному из указанных диапазонов, то он записывается в файл g без изменений.
  10. После завершения чтения файла f оба файла f и g закрываются.

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


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

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

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