读书人

奇怪为什么小弟我这样得不到正确的结

发布时间: 2012-02-06 15:52:44 作者: rapoo

奇怪,为什么我这样得不到正确的结果呢?
程序是这样的:

#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
不知道为什么呢?难道是输入输出缓冲问题?还是回车符问题呢?
在哪里修改呢?
谢谢!一直没有发现原因,汗。。

[解决办法]
文件名的原因, 该用英文字母的文件名吧:)


[解决办法]

[解决办法]
在我的VC6下没问题
[解决办法]
把后面的outStream < <outPW_str < <endl;
改成:
for(int j=0;j <8;j++)
outStream < <outPW_str[j] < <endl;
就好了。和文件名字没有关系
[解决办法]
字符取值逾界:
switch(i2) //解密
{
case 0:
temp_ch=inPassword_ch- 's '+256;
break;
case 1:
temp_ch=inPassword_ch- '2 '+256;
break;
case 2:
temp_ch=inPassword_ch- 'n '+256;
break;
case 3:
temp_ch=inPassword_ch- 'u '+256;
break;
case 4:
temp_ch=inPassword_ch- 'i '+256;
break;
case 5:
temp_ch=inPassword_ch- 'e '+256;
break;
case 6:
temp_ch=inPassword_ch- '2 '+256;
break;
case 7:
temp_ch=inPassword_ch- 's '+256;
break;
}
outPW_str[i2]=temp_ch;
如是即可。

读书人网 >C++

热点推荐