作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我一直在尝试一些解密算法和密码,并尝试自己做一些。此时我正在用 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文件的整行还是只读取第一个字符?为什么它不继续执行下一个任务?
提前谢谢
最佳答案
它总是打印您的文本文件损坏
消息,因为文件到达那里时总是关闭(或从不打开)。
看看第一部分的作用:
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()
打印它们。
关于c - 仿射代码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50008813/
我是一名优秀的程序员,十分优秀!