gpt4 book ai didi

c++ - C++ 中的 cout、XOR 和 fileIO 格式化问题

转载 作者:行者123 更新时间:2023-11-30 04:16:59 24 4
gpt4 key购买 nike

自从我开始弄乱 XOR 运算符和简单的单字符 key 加密以来,我遇到了以前从未见过的问题。第二次运行程序后,文本的末尾总是有一个随机的 ascii 字符。另一个问题是文本“Pre-order”和“Post-order”在程序的每次迭代后交替修改。我敢肯定,其中大部分只是由于初学者的错误,尤其是在出现这些问题的方式上缺乏 IO 经验。

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main()
{
ifstream ifile;
ofstream ofile;
string toProc;
string file;
char key = ' ';
cout << "Enter file location: \n";
cin >> file;
cout << "Enter key: \n";
cin >> key;
ifile.open(file);
if(ifile.is_open())
{
char temp;
temp = ifile.get();
toProc.push_back(temp);
while(ifile.good())
{
temp = ifile.get();
toProc.push_back(temp);
}

ifile.close();
}
else
{
cout << "No file found.\n";
}
cout << "Pre action: " << toProc << endl;
for(int i = 0; i < toProc.size(); i++)
toProc[i] ^= key;
cout << "Post action: " << toProc << endl;
ofile.open(file);
ofile << toProc;
ofile.close();
}

最佳答案

std::ifstreamget() 函数用于从输入文件中检索字符,返回 eof(结束-of-file) 当它到达文件末尾时。您需要对此进行检查(而不是在循环中检查 ifile.good())。

按照现在的写法,它将 eof 作为一个字符并将其附加到字符串中。那个(即它的异或版本)是您在输出中得到的有趣字符。

这是一个简单的循环,它使用 get()std::cin 读取字符并在 STDOUT 上回显它们。它正确地执行了 eof 的检查。您可以使用 ifile 而不是 std::cin 将其放入您的代码中:

#include <iostream>

int main()
{
char c;
while ((c = std::cin.get()) != std::istream::traits_type::eof())
std::cout.put(c);

std::cout << std::endl;
return 0;
}

我还应该提一下,get() 函数是逐个字符读取的,实际上并没有什么好的理由。我会使用 getline()read() 来读取更大的 block 。

关于c++ - C++ 中的 cout、XOR 和 fileIO 格式化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17386437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com