Итак, я тестирую определенные аргументы для назначения, которое в основном шифрует текстовый файл с использованием предоставленного шифрования. Вот код, который не работает, как я ожидал:Код генерирует неожиданный вывод, если добавлен дополнительный выходной оператор
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 с тем же самым словом.
Можете ли вы изменить свой вопрос, чтобы четко показать код, который * не * работает? Я не знаю, о чем вы говорите, со «вторым аргументом». –
@ M.M Отредактировано. Извините – Fresh
«вот неправильный цикл» выглядит так же, как часть вашего первого блока кода? –