Он всегда печатает ваше сообщение 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()
.