Почему мое условие с peek () не возвращает FALSE, когда следующее значение равно 50?
Когда мой код прочитал 40 из файла и сравнил, если 50 меньше 40, он возвращает TRUE. Это, очевидно, неверно, и создает ошибку в порядке появления чисел в моих подфайлах.
while (fin_dataFile >> value) //fin_dataFile is type ifstream reading the original data
{
// write the int stored in value to the second sub file
// fout_splitFile2 is type ofstream
fout_splitFile2 << value << " ";
// if the next value in the original data set is less than the current value
// that was read, break the loop so we can read in that next value to store it
// in the first sub file instead
if (fin_dataFile.peek() < value)
{
break;
}
}
Я вставил временную переменную int, чтобы сообщить мне, что возвращало fin_dataFile.peek (), и я продолжал получать 32. Это значение ascii для пробела. Имеет смысл, потому что каждое число разделено пробелом. Я попытался обойти это с помощью:
if ((fin_dataFile >> std::ws).peek() < value)
Но тогда peek () по-прежнему возвращал другие числа, чем в текстовом файле.
Фон:
Я работаю над внешним естественным слиянием. Моя функция разделения не разделяет данные правильно. Он должен прочитать в файле разделенных пробелами чисел и разбить их на два вложенных файла отсортированных данных. Это так, но не в правильном порядке.
Мой алгоритм делит числа между файлами, сравнивая следующее число в основном файле, используя peek (), с текущим числом, которое было прочитано.
Это образец текстового файла данных, которые нужно разделить:
75 55 15 20 85 30 35 10 60 40 50 25 45 80 70 65
peek()
заглядывает вперед на следующем персонаж в файле.
В вашем случае следующий символ в файле после «40» — это пробел, ASCII или 32, что меньше 40.