Я следую некоторым учебникам для начинающих по OpenGL в c ++, но поскольку я начинал как программист на c #, это заставило меня воспринимать многие вещи как должное. Таким образом, моя проблема возникла, когда я отлаживал печать моего чтения FPS на выход. Я думаю, что этот метод был чем-то вроде DebugPrintString с моей головы, который взял символ *, и в основном я печатал «FPS: x». Я использовал scanf_s, чтобы поместить значение fps в массив символов, но в этом моя проблема. Насколько большим должен быть массив символов?
Позвольте мне остановиться подробнее: мои показания FPS хранятся в виде числа с плавающей запятой, поскольку кадры / секунды обычно не являются хорошим числом. Таким образом, мой номер может быть 60 или 59.12345. 60 потребуется только 2 байта, а 59.12345 потребуется 8 (1 за период). Поэтому я подумал: «О, хорошо, мне нужно посчитать количество цифр, нет проблем!» Мальчик был в шоке.
Я сделал метод подсчета цифр, подсчитать левую часть десятичного разряда было легко, просто сначала применил его как int, чтобы удалить десятичные точки и разделить на 10 (на самом деле, я думаю, что у меня был какой-то сдвиг и посчитайте, сколько раз я могу сделать это, пока не достигну 0. А теперь, чтобы посчитать цифры с правой стороны, я просто умножу на 10, вычту цифру и делаю это, пока она не достигнет нуля. Метод обычно возвращает 32, я думаю, что это было. Так что я WTF'd и посмотрел на это в отладке, получается, когда вы умножаете число с плавающей точкой, эффективно перемещая столбцы цифр вверх из-за хорошо известной проблемы точности, он просто добавил еще одну цифру!
Я сделал несколько основных поисковиков, но не смог найти ничего, кроме char str [128] и scanf, если затем выполнить strlen (str) минус 1 (нулевой терминатор). Но я надеялся на более элегантное решение. В конце я просто преобразовал его в int и допустил 9999 кадров в секунду, также добавил проверку, чтобы увидеть, будет ли fps> 9999, но я не думаю, что это когда-нибудь произойдет. Лучше безопасно, чем SEG FAULT: (
TLDR: есть ли способ получить количество цифр в поплавке? Как Scanf делает это?!
Извините за длинный пост, просто хотел поделиться своим разочарованием>: D
Редактировать: орфографические ошибки