#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;}

解决方案 »

  1.   

    \r\n
    控制台中输出\r是不换行的。
      

  2.   

    都改成这样:
    cout<<"请输入原文:"<<endl;
    cout<<"是否退出?(Y or N)"<<endl;
      

  3.   

    再给你说一下,省得你说我没本事瞎胡扯。在控制台下,你按回车键,程序得到的就是 \r ,
    而\r的效果是回车,即回到行首; \n才是换行。你的程序中要该成这样:……
    ……for(;i<100 && input[i]!='\r';i++)
    {
    input[i]= _getche();
    }printf( "\n" );……
    ……搞定给分。
      

  4.   

    日,不对!  差点被lz这个逻辑混乱的db毁了一世英名。
    ……
    ……for(;i<100 && input[i-1]!='\r';i++)
    {
    input[i]= _getche();
    }printf( "\n" );input[i-1]='\0';             //将最后一个换成\0;……
    ……
      

  5.   

    .....
    ......
    for(;i<100 && input[i-1]!='\r';i++)
    {
    input[i]= _getche();
    }
    .....
    .....
    不用楼上的printf( "\n" );也可以换行
      

  6.   


     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' 不行?
      

  7.   

    1.   不是goto loop1不起作用。而是 char chque=getchar(); 不对,改成char chque=_getche();就行了。
    2.我在7楼里已经说了。
    在控制台下,你按回车键,程序得到的就是 \r ,
    而\r的效果是回车,即回到行首; \n才是换行。
    另外,你这些问题其实都是小问题,自己单步跟踪进去看看各个变量的值就有数了。
      

  8.   

    那为什么不用输入 printf( "\n" ); 也换行了 ?
      

  9.   

    #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-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;
    }
      

  10.   

    for(;i<100 && input[i]!='\n';i++)
    {
    input[i]= _getche();
    }
    这句有错,数组下标是从0开始,下面就对了.
    for(;i<100 && input[i-1]!='\n';i++)
    {
    input[i]= _getche();//或者把_getche()改成getchar()也对.
    }