2015-11-14 4 views
0

Итак, я тестирую определенные аргументы для назначения, которое в основном шифрует текстовый файл с использованием предоставленного шифрования. Вот код, который не работает, как я ожидал:Код генерирует неожиданный вывод, если добавлен дополнительный выходной оператор

int main() 
{ 
fstream file("text.txt",ios::out, ios::trunc); 
ifstream key("key.txt"); 
char box[16][2]; 
string input; 
getline(cin, input); 
file << input; 

for (int row = 0; row < 16; row++) 
{ 
    for (int col = 0; col < 2; col++) 
    { 
     key >> box[row][col]; 

    } 
} 

for (int i = 0; i < input.length(); i++) 
{ 
    for (int row = 0; row < 16; row++) 
    { 
     if (input.at(i) != box[row][0]) 
     { 
      cout << input.at(i); 
     } 
     else if (input.at(i) == box[row][0]) 
     { 
      input.at(i) = box[row][1]; 
      cout << input.at(i); 
     } 
    } 
} 

file.close(); 
key.close(); 

system("pause"); 
} 

Но если я заменю цикл i по:

for (int i = 0; i < input.length(); i++) 
{ 
    for (int row = 0; row < 16; row++) 
    { 
     if (input.at(i) == box[row][0]) 
     { 
      input.at(i) = box[row][1]; 
      cout << input.at(i); 
     } 
    } 
} 

Он прекрасно работает с тем исключением, что он ничего не читал, что не находится в файле шифрования. Это включает пробелы и все такое. Поэтому я подумал, что давайте просто добавим код, который что-то делает, когда мои предыдущие условия не выполняются. Ну ... это produces unexpected output.. Только для справки, here is the output of the original code с тем же самым словом.

+0

Можете ли вы изменить свой вопрос, чтобы четко показать код, который * не * работает? Я не знаю, о чем вы говорите, со «вторым аргументом». –

+0

@ M.M Отредактировано. Извините – Fresh

+0

«вот неправильный цикл» выглядит так же, как часть вашего первого блока кода? –

ответ

0

С пересмотренной логикой вы печатаете каждый символ 16 раз. Если шифр для него можно найти, вы все равно печатаете его еще 15 раз.

+0

То, что я не понимаю, это все в одном цикле. Когда я удаляю оператор if if (x! = Y), он не повторяется 16 раз, но только когда я прошу его проверить, нет ли чего-то. – Fresh

Смежные вопросы