结束while循环进行字符替换

时间:2016-09-20 03:10:56

标签: c++ for-loop encryption

这是从Keyshanc加密算法中取出的。 https://github.com/Networc/keyshanc

我的问题是:如何使用从密码数组中选择的密钥来使用多种加密输出来操作这种主要方法?

我无法在最后突破编码循环。

int main()
{
    string password[] = {"JaneAusten", "MarkTwain", "CharlesDickens", "ArthurConanDoyle"};

    for(int i=0;i<4;++i)
    {
        char keys[95];

        keyshanc(keys, password[i]); 

        char inputChar, trueChar=NULL;
        cout << "Enter characters to test the encoding; enter # to quit:\n";
        cin>>inputChar;

        for (int x=0; x < 95; ++x)
        {
            if (keys[x] == inputChar)
            {
                trueChar = char(x+32);
                break;
            }
        }

        while (inputChar != '#')
        {
            cout<<trueChar;
            cin>>inputChar;
            for (int x=0; x < 95; ++x)
            {
                if (keys[x] == inputChar)
                {
                    trueChar = char(x+32);
                    break;
                }
            }

        }
     }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您正在两个地方进行输入,因此您必须进行两次测试。

当您处于while循环中时,您必须跳出while循环,并且还要突破for(;;)循环。您可以设置i=5;以强制for(;;)循环停止。

for (int i = 0; i<4; ++i)
{
    char inputChar, trueChar = 0;
    cout << "Enter characters to test the encoding; enter # to quit:\n";

    cin >> inputChar;

    if (inputChar == '#') //<== ADD THIS
        break;

    while (inputChar != '#')
    {
        cout << trueChar;
        cin >> inputChar;

        if (inputChar == '#') //<== ADD THIS to break out of for(;;) loop
        {
            i = 5;
        }

    }
}

此外,trueCharinputChar应该初始化为0而不是NULL(尽管这与此相同)。如果未初始化,请不要打印trueChar

if (trueChar)
    cout << trueChar;