Почему cout.tellp всегда возвращает -1?

Я хочу предоставить возможность табулирования для потоков вывода текста C++. Эта функция должна позволить мне сказать "запомните эту позицию", затем разрешить несколько операций вставки и, наконец, разрешить мне сказать "добавить достаточно символов заполнения, чтобы в итоге получилось N символы за пределами первоначально отмеченной позиции ".

Стандарт iostream Система, похоже, не поддерживает положение столбца, но я думал, что смогу подделать его, используя tellp(), Я предположил, что разница между tellp() в двух точках в моей выходной последовательности будет соответствовать количество промежуточных байтов.

К сожалению, по крайней мере, в моей среде Gnu C++, cout не поддерживает фикцию позиции потока. каждый cout.tellp() вызов returns -1, Это почему?

1 ответ

TellP возвращает позицию в потоке, чтобы вы могли искать его. Консоль не позволяет искать. Кроме того, даже если вы интерпретируете положение как "количество байтов, записанных в поток с момента его создания", это число не будет использоваться для позиционирования курсора - экран переворачивается, его ширина обычно непредсказуема. Вы просто не будете знать, в каком столбце вы находитесь, так как длина строки является переменной.

Если вам нужно разумное позиционирование курсора на экране, ознакомьтесь со спецификацией терминала ANSI и управляющими командами, которые прилагаются к нему. Они позволяют обнаружение и размещение позиции курсора.

http://ascii-table.com/ansi-escape-sequences.php

Другие вопросы по тегам