首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仿射代码错误

问仿射代码错误
EN

Stack Overflow用户
提问于 2018-04-25 02:44:44
回答 1查看 49关注 0票数 0

因此,我一直在尝试一些解密算法和密码,并尝试自己完成其中的一些。此时,我正在用C语言编写一个仿射算法,我试图从我自己解密的.txt文件中解密一行,所以我认为我的问题出现在这里,因为我的代码总是弹出损坏的文本文件,而不会继续下一个任务。

代码语言:javascript
复制
 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文件的整个行,还是只读取第一个字符?为什么不继续下一步的任务呢?

提前谢谢你

EN

回答 1

Stack Overflow用户

发布于 2018-04-25 03:11:33

它总是打印您的Text file corrupted消息,因为当文件到达那里时,它总是关闭(或从未打开)的。

看看第一部分做了什么:

代码语言:javascript
复制
file = fopen("encr_affine.txt", "r");
if(file)
{
    while ((c = getc(file)) != EOF)
        putchar(c);
    fclose(file);
}

它打开文件,然后(如果它真的打开了),它逐字节读取整个文件,然后将其全部打印到stdout。然后,它关闭该文件。

然后,您尝试对已关闭的文件执行以下操作:

代码语言:javascript
复制
fgets(str,100,file);

这不会做任何事情,因为文件已关闭,并将返回NULL。如果该文件从未打开过,由于出现错误,它仍将返回NULL。

然后你再试一次:

代码语言:javascript
复制
if ( fgets(str,100,file) == NULL )                      
{
   fprintf(stderr, "Text file corrupted\n");           
   return -1;
}

这个fgets(str,100,file)总是返回NULL,因为文件又一次关闭了。

也许您真正想做的是在使用putchar()打印字节之前,在第一个循环中一次处理一个字节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50008813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档