该程序几乎运行,但我不知道如何为此制作.txt文件,它没有给我一个错误。
该项目要求我:"文件加密是在密码中写入文件内容的科学。您的加密程序应该像过滤器一样工作,读取一个文件的内容,进行修改 将数据转换为代码,然后将编码内容写入第二个文件。
第二个文件将是第一个文件的版本,但是用密码编写。虽然有复杂的加密技术,但你应该想出一个简单的加密技术。例如,您可以一次读取一个字符的第一个文件,并在将每个字符写入第二个文件之前将其添加10。 "
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
char ch;
fstream fin, fout;
fin.open("testone.txt", ios::in);
fout.open("encrypted.txt", ios::out);
while (!fin.eof())
{
fin.get(ch);
fout.put(ch + 10);
}
fin.close();
fout.close();
system("pause");
return 0;
}
答案 0 :(得分:0)
答案 1 :(得分:0)
不在我的Visual C上,但您可能需要#include <cstdlib>
才能获得system
LNK1561意味着无法找到您的主要功能。显然主要功能是存在的,所以这个应该编译。按照Beta的建议,确保您可以编译并运行一个简单的程序。
抛开编译问题,此代码无法正常工作。
首要问题:您没有检查任何错误,因此您的程序无法判断是否出现任何问题。
例如,如果文件没有打开怎么办? while (!fin.eof())
变成无限循环。如果文件未打开,则永远无法读取EOF。无论如何,试图使用EOF作为循环条件是一个坏主意。绝对是read the link in @Steephen's comment。
如果你没有用fin.get(ch);
读一个角色那么什么?当前代码尝试使用该字符。不好的主意。
测试流非常简单。 if (!fin)
完成这项工作。阅读流如何工作以了解原因。 Thius简单的测试并没有告诉你出了什么问题,但至少你知道出了什么问题。
为了简化操作,大多数流函数都会返回流。这使您可以将流操作链接在一起,并使if (!fin.get(ch))
成为判断get
是否有效的简单方法。
所以你的IO循环可以像
一样简单while (fin.get(ch) && fout.put(ch + 10))
{
}
如果get
由于任何原因无法获得ch
- 未打开的文件,文件结尾,不可读的文件 - while
循环退出。之后,您可以查询fin
以找出原因。如果EOF,太棒了。如果不是EOF,输出文件可能是错误的。
同样适用于put
。如果put
失败,则循环结束。测试原因并决定是否要保留文件。
我还建议在主页末尾放一个快速测试来打印支票。
fin.open("encrypted.txt", ios::in);
while (fin.get(ch) && std::cout.put(ch - 10))
{
}
更好的测试是读取字符,撤消加密,并与原始输入进行比较。