2016-09-20 4 views
-2

Это выведено из алгоритма шифрования 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; 
} 

ответ

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

    } 
} 

Кроме trueChar и inputChar должны быть инициализированы 0 не NULL (хотя это то же самое в этом). Не печатайте trueChar, если он не инициализирован.

if (trueChar) 
    cout << trueChar; 
Смежные вопросы