因此,我一直在尝试一些解密算法和密码,并尝试自己完成其中的一些。此时,我正在用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;
}这里的错误是什么?它是读取txt文件的整个行,还是只读取第一个字符?为什么不继续下一步的任务呢?
提前谢谢你
发布于 2018-04-25 03:11:33
它总是打印您的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()打印字节之前,在第一个循环中一次处理一个字节。
https://stackoverflow.com/questions/50008813
复制相似问题