所以我一直在尝试使用一些解密算法和密码进行体验,并试图自己做一些解密算法和密码。在他们的时刻,我正在写一个仿射算法,我试图解密一个.txt文件中的一行,我自己解密所以这里我认为我的问题出现在我的代码总是弹出文本文件已损坏,不继续到下一个任务。
yto
这里的错误是什么?它是读取txt文件的整行还是只读取第一个char?为什么它不继续进行下一个任务呢?
提前谢谢
答案 0 :(得分:1)
它始终打印您的Text file corrupted
消息,因为文件在到达时始终处于关闭状态(或从不打开状态)。
看看第一部分的作用:
file = fopen("encr_affine.txt", "r");
if(file)
{
while ((c = getc(file)) != EOF)
putchar(c);
fclose(file);
}
它打开文件,然后(如果它真的打开),它逐字节读取整个文件,然后将它全部打印到stdout。然后关闭文件。
然后你尝试在已关闭的文件上执行操作:
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()
打印它们之前在第一个循环中一次处理一个字节。