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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2014, 16:41   #1
_Лето_
Пользователь
 
Регистрация: 04.11.2013
Сообщений: 23
По умолчанию Код Цезаря для кириллицы. Работа с файлами

Эта программа работает по принципу Шифра Цезаря. Пожалуйста, помогите разобраться что она делает последовательно.

Мне нужно чтобы она зашифровывала и расшифровывала файлы, но при запуске и вводе всех параметров она выдает "ERROR: Opening file". Я не понимаю, как подключить файлы, чтобы она работала. Вообще я думал, она должна сама их создавать, но видимо я ошибаюсь.

Вот сам код:

Код:
#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 
#include <ctype.h> 
int CheckAlpha(char ch); 
FILE *infile, *outfile; 
char Infilename[23]; 
char Outfilename[23]; 
 
int CheckCH(int ch) 
{ 
 if (((ch>=192)&&(ch<=223))|| ((ch>=224)&&(ch<=255))) return 1; 
 return 0; 
} 
 
void CheckFile() 
{ 
 if (((infile=fopen(Infilename,"r"))==NULL)) 
                       { 
                        printf("ERROR: Opening file\n"); 
                        exit(-1); 
                       } 
 else if (((outfile=fopen(Outfilename,"w"))==NULL)) 
                       { 
                        printf("ERROR: Create files\n"); 
                        exit(-1); 
                       } 
} 
 
 
 
void EnterInfo(int &k, int &wish) 
{ 
 printf("The Cipher Program"); 
 printf("\nEnter Input Filename:"); 
 scanf("%s",Infilename); 
 printf("\nEnter Output Filename:"); 
 scanf("%s",Outfilename); 
 printf("\nEnter 1 if you wish to encode Russian Alphabet"); 
 printf("\nEnter 2 if you wish to decode Russian Alphabet"); 
 printf("\nEnter your choice here:"); 
 scanf("\n%d",&wish); 
 printf("Enter k: "); 
 scanf("\n%d",&k); 
} 
 
 
void Encode(int k,int firstCH,int endCH,int APower) 
{ 
 int ch, firstch=firstCH+APower;; 
 
  CheckFile(); 
  while((ch=getc(infile))!=EOF) 
 { 
  if (CheckCH(ch)) { 
            if ((ch>=firstCH)&&(ch<=endCH)) 
             { 
              ch=firstCH+((ch+k-firstCH)%APower); 
              fprintf(outfile,"%c",ch); 
             } 
            else { 
                    ch=firstch+((ch+k-firstch)%APower); 
                    fprintf(outfile,"%c",ch); 
                  } 
               } 
  else { 
    fprintf(outfile,"%c",ch); 
        } 
 } 
  fclose(outfile); 
  fclose(infile); 
} 
 
void Decode(int k,int firstCH,int endCH,int APower) 
{ 
 int ch, endch=endCH+APower; 
 
  CheckFile(); 
  while((ch=getc(infile))!=EOF) 
 { 
  if (CheckCH(ch)) { 
            if ((ch>=firstCH)&&(ch<=endCH)) 
             { 
              ch=endCH+((ch-k-endCH)%APower); 
              fprintf(outfile,"%c",ch); 
             } 
            else { 
                   ch=endch+((ch-k-endch)%APower); 
                   fprintf(outfile,"%c",ch); 
                  } 
               }  
  else { 
    fprintf(outfile,"%c",ch); 
       } 
 } 
  fclose(outfile); 
  fclose(infile); 
} 
 
void main() 
{ 
 int k,wish; 
 int firstCH, endCH, endch, firstch, APower; 
 EnterInfo(k,wish); 
 
   switch (wish) 
   { 
    case 1:firstCH=192; endCH=223; APower=32; 
        Encode(k,firstCH,endCH,APower); 
        break; 
    case 2:firstCH=192; endCH=223; APower=32; 
        Decode(k,firstCH,endCH,APower); 
        break; 
   } 
}
Что делают эти функции?

Код:
void CheckFile() 
{ 
 if (((infile=fopen(Infilename,"r"))==NULL)) 
                       { 
                        printf("ERROR: Opening file\n"); 
                        exit(-1); 
                       } 
 else if (((outfile=fopen(Outfilename,"w"))==NULL)) 
                       { 
                        printf("ERROR: Create files\n"); 
                        exit(-1); //         Почему не return 0;?
                       } 
}
Еще больше всего меня интересует конец.

Код:
switch (wish) 
   { 
    case 1:firstCH=192; endCH=223; APower=32; 
        Encode(k,firstCH,endCH,APower); 
        break; 
    case 2:firstCH=192; endCH=223; APower=32; 
        Decode(k,firstCH,endCH,APower); 
        break; 
   }
_Лето_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[freepascal] Метод Цезаря с лозунгом, (Работа с файлами приложение) }|{eka Помощь студентам 0 25.03.2013 11:50
Программа для создания .chm и с понимание кириллицы Never74 Общие вопросы Delphi 2 07.11.2011 14:53
С++ Код Цезаря(программа выводит не то что нужно) GrafMonte Помощь студентам 1 12.10.2011 09:43
[Си] Работа с файлами. Обработка текстовой инфо. Есть код - но в нём не всё ясно flexin Помощь студентам 0 17.01.2010 18:11
Написать программу для зачета (Работа с файлами) Барби Общие вопросы C/C++ 6 22.12.2007 15:40