Форум программистов, компьютерный форум CyberForum.ru

Код Цезаря для кириллицы. Работа с файлами - C++

Восстановить пароль Регистрация
 
_Лето_
1 / 1 / 0
Регистрация: 03.11.2013
Сообщений: 68
19.03.2014, 16:15     Код Цезаря для кириллицы. Работа с файлами #1
Эта программа работает по принципу Шифра Цезаря. Пожалуйста, помогите разобраться что она делает последовательно.

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

Вот сам код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#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; 
   } 
}

Что делают эти функции?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
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;?
                       } 
}
Еще больше всего меня интересует конец.

C++
1
2
3
4
5
6
7
8
9
 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; 
   }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2014, 16:15     Код Цезаря для кириллицы. Работа с файлами
Посмотрите здесь:

Шифр замены(код Цезаря) C++
Строки (Код Цезаря) C++
C++ работа с файлами в с++ для начинающих
C++ С++ Код Цезаря(программа выводит не то что нужно)
Работа с файлами. Вывести бинарный код файла на экран в Visual C++ C++
C++ Работа с файлами (код, выводящий из файла все теги)
C++ Код Цезаря на C++
Работа с файлами. Прокомментировать код C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.03.2014, 20:47     Код Цезаря для кириллицы. Работа с файлами #2
Цитата Сообщение от _Лето_ Посмотреть сообщение
"ERROR: Opening file". Я не понимаю, как подключить файлы, чтобы она работала. Вообще я думал, она должна сама их создавать, но видимо я ошибаюсь.
Создаёт, если открывается файл для записи. Если для чтения, то файл должен существовать. Если вводится не полный путь к файлу, а просто имя с расширением, то файл должен находиться в папке проекта.

Добавлено через 2 минуты
Цитата Сообщение от _Лето_ Посмотреть сообщение
Что делают эти функции?
Открывают файлы и проверяют результат открытия, если ошибка, выводят сообщение.
Yandex
Объявления
19.03.2014, 20:47     Код Цезаря для кириллицы. Работа с файлами
Ответ Создать тему
Опции темы

Текущее время: 11:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru