Мне нужна помощь по поводу моего кода, у меня есть некоторые работы, и это одно из заданий.Файл на c-языке
Предположим, что зашифрованный файл был создан с использованием схемы кодирования/декодирования.
Каждая буква заменяется другой буквой в соответствии с данным отображением, как показано ниже.
char * letters = "abcdefghijklmnopqrstuvwxyz";
char * enc = "kngcadsxbvfhjtiumylzqropwe";
Например, каждый a
становится k
при кодировании текста, и каждый k
становится a
при декодировании.
Вы будете писать программу, кодировать или декодировать файл, а затем кодировать или декодировать файл, используя приведенное выше сопоставление.
Заглавные буквы отображаются так же, как буквы нижнего регистра выше, но остаются заглавными.
Например, каждое «A» становится «K» при кодировании файла, и каждый «K» становится «A» при декодировании.
Номера и другие символы не кодируются и остаются неизменными.
Напишите программу для чтения файла и кодирования файла в зашифрованном файле. И напишите программу, чтобы получить зашифрованный файл и декодировать его в исходный файл. Ваша программа должна предлагать пользователю ввести имя входного файла и имя выходного файла.
Запросить имя файла/имя файла ввода (зашифрованный файл). Шифрование с использованием вышеуказанного кодирования/декодирования.
Запросить зашифрованный файл и декодироваться в исходный файл ввода.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main()
{
char letters[]={"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"};
char enlet[]={"kngcadsxbvfhjtiumylzqropweKNGCADSXBVFHJTIUMYLZQROPWE"};
char infile[20];
char outfile[20];
char ch;
int i;
FILE *org, * enc, *dec;
printf("Enter file name (***.txt) : ");
gets(infile);
printf("Enter saving file name (***.txt) : ");
gets(outfile);
org = fopen(infile,"r");
enc = fopen(outfile,"w+");
while((ch=fgetc(org))!=EOF)
{
for(i=0;i<52;i++)
{
if(letters[i]==ch)
{
ch=enlet[i];
}
}
fputc(ch,enc);
}
fclose(org);
fclose(enc);
return 0;
}
Этот код работает, но буквы не меняются правильно. Если в моем исходном файле есть «abcdefghijklmnopqrstuvwxyz», , тогда в кодированном файле происходит «felcadlpbrfhjeiqmwleqropwe».
Я ожидал, что это будет «kngcadsxbvfhjtiumylzqropwe» Я не знаю, какие ошибки в моем коде.
Что вы сделали, чтобы попробовать и отладить его? Вы запустили программу в отладчике? Вы помещали отладочные заявления printf, чтобы попытаться понять, где все может пойти не так? Кроме того, что вы подразумеваете под «кодом работает»? Если он не делает то, что предполагается, то нельзя сказать, что он «работает». Или вы имеете в виду, что он работает с некоторыми входами, но не с другими? – kaylum
Примечания: 1) 'char ch;' -> 'int ch;' для правильного выделения всех символов, прочитанных из 'EOF'. 2) Используйте 'fgets()' вместо 'gets()'. 3) проверить результаты 'fopen()'. – chux
Просьба последовательно отступать от кода: предлагать отступ 4 пробела после каждой открывающей скобки '{' и отступать до каждой закрывающей скобки}. Это включает в себя скобки в начале и конце каждой функции. – user3629249