Почему cout.tellp всегда возвращает -1?
Я хочу предоставить возможность табулирования для потоков вывода текста C++. Эта функция должна позволить мне сказать "запомните эту позицию", затем разрешить несколько операций вставки и, наконец, разрешить мне сказать "добавить достаточно символов заполнения, чтобы в итоге получилось N
символы за пределами первоначально отмеченной позиции ".
Стандарт iostream
Система, похоже, не поддерживает положение столбца, но я думал, что смогу подделать его, используя tellp()
, Я предположил, что разница между tellp()
в двух точках в моей выходной последовательности будет соответствовать количество промежуточных байтов.
К сожалению, по крайней мере, в моей среде Gnu C++, cout
не поддерживает фикцию позиции потока. каждый cout.tellp()
вызов returns -1
, Это почему?
1 ответ
TellP возвращает позицию в потоке, чтобы вы могли искать его. Консоль не позволяет искать. Кроме того, даже если вы интерпретируете положение как "количество байтов, записанных в поток с момента его создания", это число не будет использоваться для позиционирования курсора - экран переворачивается, его ширина обычно непредсказуема. Вы просто не будете знать, в каком столбце вы находитесь, так как длина строки является переменной.
Если вам нужно разумное позиционирование курсора на экране, ознакомьтесь со спецификацией терминала ANSI и управляющими командами, которые прилагаются к нему. Они позволяют обнаружение и размещение позиции курсора.