#include<iostream>
#include<conio.h>
#include<string>using namespace std;
int main()
{loop1:
cout<<endl<<"请输入原文:";
char input[100]={0};
int i=0;
for(;i<100 && input[i]!='\n';i++)
{
input[i]= _getche();
}
input[i]='\0'; //将最后一个换成\0; cout<<endl<<"请输入密码(最少6位) :";
string strSecret;
cin>>strSecret;
int strlen=(int)strSecret.length ();
while(strlen<6)
{
cout<<endl<<"密码位数小于6位,请重新输入:";
cin>>strSecret;
strlen=(int)strSecret.length ();
} for(int j=0,k=0;j<i;j++,(k++)%strlen)
{
input[j] += strSecret.at(k);
//input[j] += strSecret[k];
}
cout<<endl<<"原文的密文为:";
cout<<input; cout<<endl<<"请输入密码"; cin>>strSecret; cout<<endl<<"按该密码解密的原文为"; for(int j=0,k=0;j<i;j++,(k++)%strlen)
{
input[j] -= strSecret[k];
} cout<<input;
cout<<endl<<"是否退出?(Y or N)";
char chque=getchar();
if(toupper(chque)=='Y')
goto loop1;}
#include<conio.h>
#include<string>using namespace std;
int main()
{loop1:
cout<<endl<<"请输入原文:";
char input[100]={0};
int i=0;
for(;i<100 && input[i]!='\n';i++)
{
input[i]= _getche();
}
input[i]='\0'; //将最后一个换成\0; cout<<endl<<"请输入密码(最少6位) :";
string strSecret;
cin>>strSecret;
int strlen=(int)strSecret.length ();
while(strlen<6)
{
cout<<endl<<"密码位数小于6位,请重新输入:";
cin>>strSecret;
strlen=(int)strSecret.length ();
} for(int j=0,k=0;j<i;j++,(k++)%strlen)
{
input[j] += strSecret.at(k);
//input[j] += strSecret[k];
}
cout<<endl<<"原文的密文为:";
cout<<input; cout<<endl<<"请输入密码"; cin>>strSecret; cout<<endl<<"按该密码解密的原文为"; for(int j=0,k=0;j<i;j++,(k++)%strlen)
{
input[j] -= strSecret[k];
} cout<<input;
cout<<endl<<"是否退出?(Y or N)";
char chque=getchar();
if(toupper(chque)=='Y')
goto loop1;}
解决方案 »
- C++ 里面类似C# datatable 接收数据库数据集的对象没有
- 求教使用任务管理器终止进程的过程
- g_hWnd=m_hWnd 是什么意思?区别呢?g_hInst和g_hWnd;区别呢,这些变量时系统的还是可以人为定义
- 请教一个windows下虚拟文件的思路
- 请问对于FAT结构的分区,删除文件的过程是什么样的?
- vc6获取网页内容
- 矩形对应数组的问题
- 小弟论坛开张了,请大家有空去坐坐阵!(注:是动网论坛,小弟无能力自己编)
- vc用MySQL C API远程连接MySql数据库服务器时间过长的问题。
- 关于 CxImage的插值算法的问题
- 分割的视图间怎么相互调用对方的函数?
- 怎样用代码检测并口针式打印机状态?
控制台中输出\r是不换行的。
cout<<"请输入原文:"<<endl;
cout<<"是否退出?(Y or N)"<<endl;
而\r的效果是回车,即回到行首; \n才是换行。你的程序中要该成这样:……
……for(;i<100 && input[i]!='\r';i++)
{
input[i]= _getche();
}printf( "\n" );……
……搞定给分。
……
……for(;i<100 && input[i-1]!='\r';i++)
{
input[i]= _getche();
}printf( "\n" );input[i-1]='\0'; //将最后一个换成\0;……
……
......
for(;i<100 && input[i-1]!='\r';i++)
{
input[i]= _getche();
}
.....
.....
不用楼上的printf( "\n" );也可以换行
gujianfei1979(谷谷) (
日,不对! 差点被lz这个逻辑混乱的db毁了一世英名。
……
……for(;i<100 && input[i-1]!='\r';i++)
{
input[i]= _getche();
}printf( "\n" );input[i-1]='\0'; //将最后一个换成\0;……
……==============================================================================谢谢给正解,但为什么那个 goto loop1 不起作用?为什么 input[i]!='\n' 不行?
2.我在7楼里已经说了。
在控制台下,你按回车键,程序得到的就是 \r ,
而\r的效果是回车,即回到行首; \n才是换行。
另外,你这些问题其实都是小问题,自己单步跟踪进去看看各个变量的值就有数了。
#include<conio.h>
#include<string>using namespace std;
int main()
{
loop1:
cout<<endl<<"请输入原文:";
char input[100]={0};
int i=0;
for(;i<100 && input[i-1]!='\r';i++)
{
input[i]= _getche();
} printf( "\n" ); input[i-1]='\0'; //将最后一个换成\0; cout<<"请输入密码(最少6位) :"<<endl;
string strSecret;
cin>>strSecret;
int strlen=(int)strSecret.length ();
while(strlen<6)
{
cout<<endl<<"密码位数小于6位,请重新输入:";
cin>>strSecret;
strlen=(int)strSecret.length ();
}
for(int j=0,k=0;j<i-1;j++,k=((k+1)%strlen))
{
input[j] += strSecret.at(k);
//input[j] += strSecret[k];
}
cout<<endl<<"原文的密文为:";
cout<<input; cout<<endl<<"请输入密码"; cin>>strSecret; cout<<endl<<"按该密码解密的原文为"; for(int j=0,k=0;j<i-1;j++,k=((k+1)%strlen))
{
input[j] -= strSecret[k];
} cout<<input;
cout<<endl<<"是否退出?(Y or N)";
char chque= _getche();
if(toupper(chque)=='Y')
goto loop1; return 0;
}
{
input[i]= _getche();
}
这句有错,数组下标是从0开始,下面就对了.
for(;i<100 && input[i-1]!='\n';i++)
{
input[i]= _getche();//或者把_getche()改成getchar()也对.
}