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

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

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

Листинг программы
  1. #include <stdio.h>
  2. char code(char *c, int n)
  3. {
  4. int i;
  5. for (i=0; c[i]!=0; i++)
  6. {
  7. c[i]=c[i]+n;
  8. if (c[i]>'z') c[i]=c[i]-'z'+'a'-1;
  9. if (c[i]<'a') c[i]=c[i]+'z'-'a'+1;
  10. }
  11. }
  12. int main()
  13. {
  14. FILE *f=fopen("a.txt","r"), *g=fopen("b.txt","w");
  15. int n=10;
  16. char c;
  17. while (!feof)
  18. {
  19. c=getc(f);
  20. if (c>='a' && c<='z')
  21. putc(code(c,n),g);
  22. }
  23. fclose(f);
  24. fclose(g);
  25. }
Вот прога, которая читает из файла, кодирует и вставляет в другой файл. кодирует так (например, abc сдвинем на 2 получим cde). НО она не работает, помогите найти ошибку. P.s. я понимаю, что вы офигенные прогеры и это для вас херня, но мне нужен именно такой код, но без ошибки, очень благодарю за понимание.

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>// exit()
  3. char code1(char c, int n)
  4. {
  5.     // int i; //warning C4101: 'i' : unreferenced local variable
  6.         c=c+n; //c+=n;
  7.         if (c>'Z')  c -= ('Z'-'A'+1);
  8.         else if (c>'Z')  c += ('Z'-'A'+1);// Z-A+1 == z-a+1 величина постоянная...
  9.         return c; // добавил
  10.         // для изменения операнда надо делать void code() и вызвать code(&c,n)
  11. }
  12. char code(char c, int n)
  13. {
  14.         c=c+n;
  15.         if (c>'z')  c -= ('z'-'a'+1);
  16.         else if (c<'a')  c += ('Z'-'A'+1);
  17.         return c;
  18. }
  19. int main(void)
  20. {
  21.     int n=-2;
  22.     char c; // int fgetc(FILE *stream);//int fputc(int ch, FILE *stream);
  23.  
  24.     FILE *f=fopen("a.txt","r"), *g=fopen("b.txt","w");
  25.    
  26.     if (f==NULL || g == NULL) {
  27.         printf("He удается открыть файл. (%x %x)\n", f, g);
  28.         exit(1);
  29.     }
  30.     printf("файл.\n");
  31.     while ((c=fgetc(f)) !=EOF)
  32.     {
  33.         if (c>='a' && c<='z')   fputc(code(c,n), g);
  34.         else if (c>='A' && c<='Z')   fputc(code1(c,n), g);
  35.         else fputc(c, g);
  36.     }
  37.     fclose(f);
  38.     fclose(g);
  39. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы