Ошибки аффинного кода - PullRequest
0 голосов
/ 24 апреля 2018

Итак, я пытался экспериментировать с некоторыми алгоритмами дешифрования и шифрами и пытался сделать некоторые из них самостоятельно.В этот момент я пишу в C аффинный алгоритм, который пытаюсь расшифровать строку из файла .txt, который я расшифровал сам, так что вот где я думаю, что моя проблема возникает, так как мой код всегда выдает текстовый файл поврежденным и не работаетк следующему заданию.

 file = fopen("encr_affine.txt", "r");
if(file)
{
    while ((c = getc(file)) != EOF)
        putchar(c);
    fclose(file);
}


fgets(str,100,file);

if ( fgets(str,100,file) == NULL )                      
{
   fprintf(stderr, "Text file corrupted\n");           
   return -1;
}

В чем здесь ошибка?Это чтение всей строки в текстовом файле или только первый символ?И почему это не переходит к следующим задачам?

Заранее спасибо

1 Ответ

0 голосов
/ 24 апреля 2018

Он всегда печатает ваше сообщение Text file corrupted, потому что файл всегда закрывается (или никогда не открывается), когда попадает туда.

Посмотрите, что делает эта первая часть:

file = fopen("encr_affine.txt", "r");
if(file)
{
    while ((c = getc(file)) != EOF)
        putchar(c);
    fclose(file);
}

Он открывает файл, затем (если он действительно открыт), он читает весь файл, побайтно, а затем печатает все это в стандартный вывод. Затем закрывает файл.

Затем вы пытаетесь сделать что-то для закрытого файла:

fgets(str,100,file);

Это ничего не изменит, потому что файл закрыт и вернет NULL. Если файл никогда не был открыт, он все равно вернул бы NULL из-за ошибки.

Но тогда вы попробуйте еще раз:

if ( fgets(str,100,file) == NULL )                      
{
   fprintf(stderr, "Text file corrupted\n");           
   return -1;
}

Это fgets(str,100,file) всегда возвращает NULL, потому что файл снова закрывается.

Возможно, что вы действительно хотите сделать, это обработать байты по одному в первом цикле, прежде чем печатать их с помощью putchar().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...