首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-02-06 
奇怪,为什么我这样得不到正确的结果呢?程序是这样的:#includeiostream#includefstream#includestring

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

#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;
如是即可。

热点排行