奇怪,为什么小弟我这样得不到正确的结果呢
奇怪,为什么我这样得不到正确的结果呢?
程序是这样的:
#include <iostream>
#include <fstream>
#include <string>
#include <cassert>
using namespace std;
int main()
{
//-------读取密码并加密转换
string OriginFileName= "原始密码.txt ";
ifstream OriginStream(OriginFileName.data(),ios::in);
assert(OriginStream.is_open()); //判断是否读到文件
char inPassword_ch=0; //保存原始的密码字符
char temp_ch;
string outTempPW_str( "00000000 "); //保存加密后的密码字符串
for(int i=0;i <8;i++)
{
OriginStream> > inPassword_ch; //从文件中读取8个密码字符
switch(i) //对每个字符进行简单的加密测试
{
case 0:
temp_ch=inPassword_ch+ 's ';
break;
case 1:
temp_ch=inPassword_ch+ '2 ';
break;
case 2:
temp_ch=inPassword_ch+ 'n ';
break;
case 3:
temp_ch=inPassword_ch+ 'u ';
break;
case 4:
temp_ch=inPassword_ch+ 'i ';
break;
case 5:
temp_ch=inPassword_ch+ 'e ';
break;
case 6:
temp_ch=inPassword_ch+ '2 ';
break;
case 7:
temp_ch=inPassword_ch+ 's ';
break;
default:
break;
}
outTempPW_str[i]=temp_ch;
}
OriginStream.close(); //关闭与原始密码文件联系
//------输出加密后的密码文件
string outTempFileName= "加密后文件.txt ";
ofstream outTempStream(outTempFileName.data(),ios::out);//app
assert(outTempStream.is_open()); //判断是否打开文件
outTempStream < <outTempPW_str < <endl;
outTempStream.close();
//------读取加密后的文件并解密
string inTempFileName=outTempFileName;
ifstream inTempStream(inTempFileName.data(),ios::in);
assert(inTempStream.is_open()); //判断是否读到文件
string outPW_str( "00000000 "); //保存最后解密的密码串
for(int i2=0;i2 <8;i2++)
{
inTempStream> > inPassword_ch; //从文件中读取密文
switch(i2) //解密
{
case 0:
temp_ch=inPassword_ch- 's ';
break;
case 1:
temp_ch=inPassword_ch- '2 ';
break;
case 2:
temp_ch=inPassword_ch- 'n ';
break;
case 3:
temp_ch=inPassword_ch- 'u ';
break;
case 4:
temp_ch=inPassword_ch- 'i ';
break;
case 5:
temp_ch=inPassword_ch- 'e ';
break;
case 6:
temp_ch=inPassword_ch- '2 ';
break;
case 7:
temp_ch=inPassword_ch- 's ';
break;
default:
break;
}
outPW_str[i2]=temp_ch;
}
inTempStream.close(); //关闭读取文件联系
//-----输出解密后的密码文件
string outFileName= "解密后文件.txt ";
ofstream outStream(outFileName.data(),ios::out);//app
assert(outStream.is_open()); //判断是否打开文件
outStream < <outPW_str < <endl;
outStream.close();
system( "pause ");
return 0;
}
----------
我在文件“原始密码.txt”中输入11111111,在“解密后文件.txt”却得不到密码值11111111
不知道为什么呢?难道是输入输出缓冲问题?还是回车符问题呢?
在哪里修改呢?
谢谢!一直没有发现原因,汗。。
------解决方案--------------------
文件名的原因, 该用英文字母的文件名吧:)
程序是这样的:
#include <iostream>
#include <fstream>
#include <string>
#include <cassert>
using namespace std;
int main()
{
//-------读取密码并加密转换
string OriginFileName= "原始密码.txt ";
ifstream OriginStream(OriginFileName.data(),ios::in);
assert(OriginStream.is_open()); //判断是否读到文件
char inPassword_ch=0; //保存原始的密码字符
char temp_ch;
string outTempPW_str( "00000000 "); //保存加密后的密码字符串
for(int i=0;i <8;i++)
{
OriginStream> > inPassword_ch; //从文件中读取8个密码字符
switch(i) //对每个字符进行简单的加密测试
{
case 0:
temp_ch=inPassword_ch+ 's ';
break;
case 1:
temp_ch=inPassword_ch+ '2 ';
break;
case 2:
temp_ch=inPassword_ch+ 'n ';
break;
case 3:
temp_ch=inPassword_ch+ 'u ';
break;
case 4:
temp_ch=inPassword_ch+ 'i ';
break;
case 5:
temp_ch=inPassword_ch+ 'e ';
break;
case 6:
temp_ch=inPassword_ch+ '2 ';
break;
case 7:
temp_ch=inPassword_ch+ 's ';
break;
default:
break;
}
outTempPW_str[i]=temp_ch;
}
OriginStream.close(); //关闭与原始密码文件联系
//------输出加密后的密码文件
string outTempFileName= "加密后文件.txt ";
ofstream outTempStream(outTempFileName.data(),ios::out);//app
assert(outTempStream.is_open()); //判断是否打开文件
outTempStream < <outTempPW_str < <endl;
outTempStream.close();
//------读取加密后的文件并解密
string inTempFileName=outTempFileName;
ifstream inTempStream(inTempFileName.data(),ios::in);
assert(inTempStream.is_open()); //判断是否读到文件
string outPW_str( "00000000 "); //保存最后解密的密码串
for(int i2=0;i2 <8;i2++)
{
inTempStream> > inPassword_ch; //从文件中读取密文
switch(i2) //解密
{
case 0:
temp_ch=inPassword_ch- 's ';
break;
case 1:
temp_ch=inPassword_ch- '2 ';
break;
case 2:
temp_ch=inPassword_ch- 'n ';
break;
case 3:
temp_ch=inPassword_ch- 'u ';
break;
case 4:
temp_ch=inPassword_ch- 'i ';
break;
case 5:
temp_ch=inPassword_ch- 'e ';
break;
case 6:
temp_ch=inPassword_ch- '2 ';
break;
case 7:
temp_ch=inPassword_ch- 's ';
break;
default:
break;
}
outPW_str[i2]=temp_ch;
}
inTempStream.close(); //关闭读取文件联系
//-----输出解密后的密码文件
string outFileName= "解密后文件.txt ";
ofstream outStream(outFileName.data(),ios::out);//app
assert(outStream.is_open()); //判断是否打开文件
outStream < <outPW_str < <endl;
outStream.close();
system( "pause ");
return 0;
}
----------
我在文件“原始密码.txt”中输入11111111,在“解密后文件.txt”却得不到密码值11111111
不知道为什么呢?难道是输入输出缓冲问题?还是回车符问题呢?
在哪里修改呢?
谢谢!一直没有发现原因,汗。。
------解决方案--------------------
文件名的原因, 该用英文字母的文件名吧:)